-> где () предложения чувствительны к регистру

У меня есть запрос, например, так:

$profilesx->where('qZipCode', $location)->
orWhere('qCity', 'LIKE', '%'.$location.'%');

Где местоположение равно belgradeи столбец базы данных говорит Belgrade,

Кажется, что он чувствителен к регистру (с использованием = или LIKE), поэтому, если я ищу Belgrade Я получаю результат, но если я ищу belgrade Я не получаю никаких результатов.

Как сделать это без учета регистра?

0

Решение

Набор символов и параметры сортировки по умолчанию: latin1 и
latin1_swedish_ci, поэтому небинарные сравнения строк имеют значение
нечувствителен по умолчанию. Это означает, что если вы ищете с col_name
Как ‘a%’, вы получаете все значения столбцов, которые начинаются с A или a. Делать
этот регистр чувствителен к регистру, убедитесь, что один из операндов имеет
чувствительный к регистру или двоичное сопоставление. Например, если вы сравниваете
столбец и строка, которые оба имеют набор символов latin1, вы можете
используйте оператор COLLATE, чтобы любой операнд имел
сортировка latin1_general_cs или latin1_bin:

источник: http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

На самом деле произошло то, что чувствительность к регистру была отключена (что не так уж плохо). Решение дано в следующем разделе этого документа. Попробуйте что-то вроде

orWhere('qCity', 'COLLATE latin1_general_cs LIKE', '%'.$location.'%');

Если laravel это не нравится, вам придется использовать необработанный запрос или изменить параметры сортировки для столбца.

Как примечание, постарайтесь избегать LIKE% что-то% запросов, если можете. Mysql не может использовать индекс для таких запросов, и они обычно имеют тенденцию работать медленно на больших таблицах из-за этого.

0

Другие решения

Обычно это параметры сортировки для базы данных. Вам необходимо установить тип сортировки без учета регистра.

Прочитайте эту ссылку для получения дополнительной информации:

http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

0

По вопросам рекламы [email protected]