MySQL SELECT DISTINCT 应该区分大小写吗?

问题描述 投票:0回答:4

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

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

现在这个查询:

select distinct(name) from X;

结果:

这个

这是怎么回事?我希望 SELECT DISTINCT 区分大小写。这不应该是默认的吗?

mysql sql distinct case-sensitive
4个回答
35
投票

使用

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


9
投票

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

像这样:

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


2
投票

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

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

SQL 输出:


0
投票

根据 ishmael 的评论,接受的答案无法正确处理变音符号和其他非 ASCII 字符,这是我的首选方式(正确处理这些情况):

SELECT DISTINCT NAME COLLATE latin1_bin FROM X;

您当然可以添加一个 where 子句(或任何其他普通的 SQL 内容)来限制结果。

© www.soinside.com 2019 - 2024. All rights reserved.