Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80

Поиск чувствителен к регистру

15.01.2012, 20:58. Показов 2881. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, помогите пожалуйста разобраться в проблеме. Я заблудился в трёх соснах.

Пишу два простых скрипта по управлению MySQL-таблицей: один для вывода из неё данных (с функцией поиска), второй для добавления.
Казалось бы, куда уж проще.
Однако, возникла проблема - поиск чувствителен к регистру. Я 6 часов уже сижу смотрю в этот код, переписываю его постоянно и нефига не помогает

В кратце - как оно работает.

Для начала из отдельным php-скриптом создаётся таблица:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        $query =
          "CREATE TABLE people (" . 
          "user_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, " . 
          "value1 TINYTEXT NOT NULL, " . 
          "value2 TINYTEXT NOT NULL, " . 
          "value3 TINYTEXT NOT NULL, " . 
          "value4 TINYTEXT NOT NULL, " . 
          "value5 TINYTEXT, " . 
          "value6 TINYTEXT, " . 
          "value7 TINYTEXT, " . 
          "PRIMARY KEY (user_id))";
        
        // исполнение запроса
        $result = mysql_query($query);
Ура, создали.
Дальше будет скрипт добавления данных.

Но здесь я хочу остановиться и обратить ваше внимание на одну важную вещь которую я обнаружил.
Так вот: запросы, написанные непосредственно из командной строки mysql, аналогичные тем, что ниже реализуются через php, так вот эти запросы работают аналогично! То есть не правильно (различая регистр)!
В чём же проблема? Таблица создана неверно? У функции создания таблицы пропущены важные параметры? Не произведена какая-то дополнительная обработка?
TINYTEXT, кстати, в прошлой жизни был VARCHAR'ом. Я уж было подумал в этом дело и заменил, но не помогло.

Итак, скрипт добавления данных. Для начала он извлекает из формы данные, что отослал пользователь:
PHP
1
2
3
4
    $value1 = htmlspecialchars($_POST["value1"]);
    $value2 = htmlspecialchars($_POST["value2"]);
    $value3 = htmlspecialchars($_POST["value3"]);
    ...
Потом он добавляет эти данные в SQL-таблицу:
PHP
1
2
3
4
5
6
      $query = 'INSERT INTO people VALUES ' .
        '(NULL, "' . $value1 . '", "' . $value2 . '", "' . $value3 . '", "' . $value4 . '", ' .
        '"' . $value5 . '", "' . $value6 . '", "' . $value7 . '")';
 
      // исполнение запроса
      $result = mysql_query($query);
И реально ведь добавляет.
Дальше я вызваю скрипт вывода текущего содержимого таблицы, что был заранее подключен через require_once.

Скрипт простой: он либо выводит всё (если запущен без аргументов), либо выводит результат поискового запроса.
В случае поиска строка запроса к MySQL выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
      $query = 'SELECT * FROM people WHERE (' . 
        'value1 LIKE "%' .$search. '%" OR ' .
        'value2 LIKE "%' .$search. '%" OR ' . 
        'value3 LIKE "%' .$search. '%" OR ' . 
        'value4 LIKE "%' .$search. '%" OR ' . 
        'value5 LIKE "%' .$search. '%" OR ' . 
        'value6 LIKE "%' .$search. '%" OR ' . 
        'value7 LIKE "%' .$search. '%") ORDER BY value2, value3';
 
      $result = mysql_query($query);
Ну и дальше вывод:
PHP
1
2
3
4
      while ($result_row = mysql_fetch_row(($result))) {
        echo($result_row[0] . ", ");
        echo($result_row[1] . ", ");
        ...
Так вот.
Если строка поиска набрана с учётом регистра - всё работает прекрасно.
Но стоит одну букву изменить на строчную или заглавную, как тут же на запрос приходит пустой ответ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2012, 20:58
Ответы с готовыми решениями:

Поиск чувствительный к регистру
Суть в следующем. Допустим я ввожу логин в поле ввода "Qwerty"? после чего нажимаю на кнопку и посылаю запрос к базе, чтобы найти строку с...

like был чувствителен к регистру
Как сделать, что бы like выбирал только слова начинающиеся с 'П', а то like 'П*' выбирает и те, которые начинаются на 'П' и на 'п'.

Макрос чувствителен к регистру при извлечении данных из txt
Доброго дня, форумчане. Подскажите решение насчет макроса. В общем макрос - берет данные из табулированного txt - и вытаскивает их в...

3
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
16.01.2012, 19:40
SQL
1
"where LOWER( somefiled ) like '%" . strtolower($findme) . "%'"
1
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
17.01.2012, 01:33  [ТС]
crautcher, спасибо, но не помогает.

Т.е. результатов не приносит даже строка без strtolower, с ручным указанием нижней раскладки:
SQL
1
SELECT * FROM people WHERE (LOWER(fio) LIKE '%сидоров%');
Бред какой-то.

Боюсь придётся делать полную выборку из базы с дальнейшей ручной выборкой через strcasecmp.

Добавлено через 16 минут
Во! Когда я добавил в php следующий код (после соединения с БД):
PHP
1
mysql_set_charset( 'utf8' );
Мне при попытке поиска стала писаться такая вот ошибка:
Невозможно выполнить запрос на поиск:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
Добавлено через 1 час 47 минут
Ага!

Посмотрел через phpmyadmin
У всей базы данных и всех таблиц стояла latin1_swedish_ci. Сменил базе и таблице на utf8_general_ci.
Теперь, когда я добавляю в код строку:
PHP
1
mysql_set_charset( 'utf8' );
... у меня всё работает

Видимо, что-то не так в настройках моей Убунты с кодировками по-умолчанию.
0
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
17.01.2012, 21:33
http://www.php.su/functions/?strtolower
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2012, 21:33
Помогаю со студенческими работами здесь

Сделать, чтобы при вводе имени запрос не был чувствителен к регистру
Хочу задать вопрос, чтобы при вводе имени запрос не был чувствителен к регистру. То есть он мог написать "кончита",...

Поиск подстроки, нечувствительный к регистру
Есть ли встроенные функции для поиска подстроки в AnsiString, нечувствительный к регистру (т.е. строчные и прописные буквы считаются...

Поиск в таблице чувсвительный к регистру.
Пиплы хелп! В базе есть таблица, в ней поле: varchar(128). Необходимо организовать выборку с помощью LIKE, или еще как-нибудь, буду...

Как сделать поиск LIKE из БД не восприимчивым к регистру?
Сам запрос вот - String sqlQuery1 = "SELECT * FROM city AS t1, region AS t2 ON t1.region_number = t2._id WHERE lower(t1.name) LIKE '%'...

Запрос к регистру накопления и регистру сведенй
как не используя СКД в 1 запросе получить запись из Регистра сведений на момент записи регистра накопления? конкретнее нужна себестоимость...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru