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: