Mysql — Как выполнить поиск с учетом регистра?

#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 (потому что на побайтовой основе они НЕ эквивалентны):