MySQL SELECT DISTINCT должен быть чувствителен к регистру?

Как сделать MySQL SELECT DISTINCT чувствительным к регистру?

create temporary table X (name varchar(50) NULL);
insert into X values ('this'), ('This');

теперь этот запрос:

select distinct(name) from X;

результаты:

этой

что здесь происходит? Я хотел бы выбрать DISTINCT для учета регистра. Разве это не должно быть по умолчанию?

3 ответов


использовать BINARY оператор для этого:

SELECT DISTINCT(BINARY name) AS Name FROM X;

вы можете CAST это при выборе:

SELECT DISTINCT 
(CAST(name AS CHAR CHARACTER SET utf8) COLLATE utf8_bin) AS Name FROM X;

посмотреть этот SQLFiddle


Я бы предпочел обновить определение столбца, чтобы оно было чувствительным к регистру.

такой:

create table X (name VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NULL);
insert into X values ('this'), ('This'); 

SQLFiddle:http://sqlfiddle.com#!2 / add276/2/0


вы можете использовать функцию хэширования (MD5), а затем группой.

SELECT Distinct(MD5(Cat)), Cat FROM (
  SELECT 'Cat'
    UNION ALL
  SELECT 'cat'
) AS BOW

вывод SQL:

enter image description here