Регистр в запросе учитывается - влияет ли сборка PHP или Mysql?

Menro

web, seo, email, hack
Регистрация
27 Янв 2008
Сообщения
689
Реакции
138
Всем привет!
Столкнулся тут с проблемой при работе с OpenCart 3.
Ввожу запрос в форму поиска - Запрос - пусто
Ввожу запрос в форму - запрос - получаю результаты.

Делаю вывод, что учитывается регистр.
Только вот фишка в том, что точно этот же сайт (полная копия) на другом серваке работает нормально.
Поля по которым поиск работает имеют нужную кодировку utf8_general_ci. Всё точь в точь, кроме версий php/mysql.
Связи с этим и вопрос, это может какая-то влиять?
Ещё кстати, этот второй сервак где не работает поиск на Windows.

Помогите советом, может ещё какие-то мысли?
 
Всем привет!
Столкнулся тут с проблемой при работе с OpenCart 3.
Ввожу запрос в форму поиска - Запрос - пусто
Ввожу запрос в форму - запрос - получаю результаты.

Делаю вывод, что учитывается регистр.
Только вот фишка в том, что точно этот же сайт (полная копия) на другом серваке работает нормально.
Поля по которым поиск работает имеют нужную кодировку utf8_general_ci. Всё точь в точь, кроме версий php/mysql.
Связи с этим и вопрос, это может какая-то влиять?
Ещё кстати, этот второй сервак где не работает поиск на Windows.

Помогите советом, может ещё какие-то мысли?
При некоторых условиях регистр не учитывается под Windows
 
При некоторых условиях регистр не учитывается под Windows
Очень информативно..., но всё равно спасибо.
Кстати, название товара у меня: Робот
,когда ищу Робот - не находит, а когда ищу робот - находит.
То есть речь идет даже не о регистрозависимости. а о том, что не воспринимается верхний регистр.
 
Единственное, что могу дать ссылку на офф. документацию:

Для просмотра ссылки Войди или Зарегистрируйся

Думаю проблема в версии MySQL или же в кодировке самих данных, которые хранятся в таблице, так-как по умолчанию в Windows кодировка CP1251.

Вот ссылка на подобную проблему. Что-бы полностью здесь все не писать - рекомендую прочитать и ознакомится, возможно это поможет вам решить проблему:

Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
А в базе с каким регистром запись? Может тогда форму ввода в поиске приводить к нижнему регистру всегда?
PHP:
mb_strtolower ( string $str [, string $encoding = mb_internal_encoding() ] )
 
А в базе с каким регистром запись? Может тогда форму ввода в поиске приводить к нижнему регистру всегда?
PHP:
mb_strtolower ( string $str [, string $encoding = mb_internal_encoding() ] )
В базе запись и в нижнем и в верхнем регистре, то есть написано: "Робот".
За совет приводить к нижнему регистру спасибо, тоже так сразу думал, но что-то не получилось привести, не работ mb_strtolower в моём случае.
В любом случае, способ не лучший, а поскольку на другом серваке всё исправно работает, решил спросить, может кто в курсе с чем это может быть связано.
 
В базе запись и в нижнем и в верхнем регистре, то есть написано: "Робот".
За совет приводить к нижнему регистру спасибо, тоже так сразу думал, но что-то не получилось привести, не работ mb_strtolower в моём случае.
В любом случае, способ не лучший, а поскольку на другом серваке всё исправно работает, решил спросить, может кто в курсе с чем это может быть связано.
Покажите сам SQL запрос (или группу запросов), который ищет в базе по ключевому слову
 
Пробовал выполнять поисковый запрос непосредственно в базе?
 
Все дело в кодировке таблицы/поля. Я в основном в проэктах использую кодировку utf8_general_ci . ci - означает case insensitive, что в переводе регистров независимый. utf8 не бывает регистров зависимым (к сожалению). Конечно же текст будет в базе храниться с разным регистром, так сказать как запишите так и будет, но поиск по тексту будет без учета регистра. Робот и робот выдадут одинаковые результаты.

Если же нужна регистрозависимая выборка, то кодировку следует сменть на что то вроде latin1_general_cs , cs - case sensitive, что значит регистро зависимый (в отличии от utf8 бывает так же регистронезависимая кодировка latin1_general_ci)

К примеру у нас есть таблица "users" с полями: id (автоинкремент), firstname, lastname
В таблице "users", есть пользователи "Робот Валли" и "робот андроид"

PHP:
INSERT INTO users (`firstname`, `lastname`) VALUES ("Робот", "Валли"), ("робот", "андроид");


если колонка "firstname" будет иметь кодировку "utf8_general_ci":

PHP:
SELECT * FROM `users` WHERE `firstname` = 'Робот' ## вернет обе строки

если колонка "firstname" будет иметь кодировку "latin1_general_cs":

PHP:
SELECT * FROM `users` WHERE `firstname` = 'Робот' ## вернет одну строку, где робот написано с большой
 
Последнее редактирование:
Обращение должно быть регистронезависимым.
ВНИМАНИЕ! Начиная с MySQL 5.5.3 вы должны использовать utf8mb4, а не utf8. Оба они относятся к кодировке UTF-8, но более старый utf8 имеет ограничение, специфичное для MySQL, не позволяющее использовать символы, пронумерованные выше 0xFFFD.
Данным фактом обычно пренебрегают.
 
Назад
Сверху