У меня есть запрос, например, так:
$profilesx->where('qZipCode', $location)->
orWhere('qCity', 'LIKE', '%'.$location.'%');
Где местоположение равно belgrade
и столбец базы данных говорит Belgrade
,
Кажется, что он чувствителен к регистру (с использованием = или LIKE), поэтому, если я ищу Belgrade
Я получаю результат, но если я ищу belgrade
Я не получаю никаких результатов.
Как сделать это без учета регистра?
Набор символов и параметры сортировки по умолчанию: 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 не может использовать индекс для таких запросов, и они обычно имеют тенденцию работать медленно на больших таблицах из-за этого.
Обычно это параметры сортировки для базы данных. Вам необходимо установить тип сортировки без учета регистра.
Прочитайте эту ссылку для получения дополнительной информации:
http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html