MySQL SELECT DISTINCT应该区分大小写?

ish*_*ael 12 mysql sql distinct case-sensitive

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

create temporary table X (name varchar(50) NULL);
insert into X values ('this'), ('This');
Run Code Online (Sandbox Code Playgroud)

现在这个查询:

select distinct(name) from X;
Run Code Online (Sandbox Code Playgroud)

结果是:

这个

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

him*_*056 25

使用BINARY运算符:

SELECT DISTINCT(BINARY name) AS Name FROM X;
Run Code Online (Sandbox Code Playgroud)

你也CAST可以选择:

SELECT DISTINCT 
(CAST(name AS CHAR CHARACTER SET utf8) COLLATE utf8_bin) AS Name FROM X;
Run Code Online (Sandbox Code Playgroud)

看到这个SQLFiddle

  • 这很简单,但事实证明BINARY会混淆非ASCII字符.例如,如果我们使用(entrée,Entrée')代替('this','This'),那么SELECT DISTINCT(BINARY(...))将返回blob.相反,您可以使用COLLATE作为@ roberto-navarro建议(除了在CREATE语句中除外),如下所示:`SELECT DISTINCT NAME COLLATE latin1_bin FROM X;` (3认同)

Rob*_*rro 7

我宁愿将列定义更新为区分大小写的碰撞.

像这样:

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

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