#mysql
#mysql
Вопрос:
У меня есть значения 4cci и 4ccI в базе данных. Когда я запускаю этот запрос, я получаю обе строки.
select * from urls where url = "4cci";
Как выполнить поиск с учетом регистра?
Комментарии:
1. Интересно. Это не то поведение по умолчанию, которое вы описываете.
Ответ №1:
Зависит от вашей сортировки текстовых полей
Проверьте руководство
mysql> SET @s1 = 'MySQL' COLLATE latin1_bin,
-> @s2 = 'mysql' COLLATE latin1_bin;
mysql> SELECT @s1 = @s2;
-----------
| @s1 = @s2 |
-----------
| 0 |
-----------
Ответ №2:
Используйте ключевое слово BINARY перед столбцом, в котором вы хотите выполнить поиск с учетом регистра
Описание :
ДВОИЧНАЯ функция преобразует значение в двоичную строку.
Пример
Предположим, у нас есть одна таблица stores с 3 записями, где две таблицы имеют столбец country как «IN», а одна — как «в»
select count(*) from stores where BINARY country = 'in';
Вывод: количество: 1
или
Используйте функцию CAST() :
Описание :
Преобразуйте значение в тип данных DATE:
select count(*) from stores where CAST(country AS BINARY) = 'IN';
Вывод: количество: 2
Как работает эта функция :
Поймите на простом примере :
SELECT BINARY "HELLO" = "hello";
Вывод: 0
Здесь MySQL выполняет побайтное сравнение «HELLO» и «привет» и возвращает 0 (потому что на побайтовой основе они НЕ эквивалентны):