17

如何使 MySQL 的 SELECT DISTINCT 区分大小写?

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

现在这个查询:

select distinct(name) from X;

结果是:

这个

这里发生了什么?我希望 SELECT DISTINCT 区分大小写。这不应该是默认的吗?

4

3 回答 3

30

为此使用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

于 2013-10-19T06:03:31.903 回答
7

我宁愿将列定义更新为区分大小写的冲突。

像这样:

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

于 2013-10-19T06:09:27.933 回答
2

您可以使用散列函数 (MD5),然后对其进行分组。

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

SQL 输出:

在此处输入图像描述

于 2016-11-23T15:10:12.150 回答