SQL独特的varchar区分大小写的问题

我试图填充一个单词列表的SQL表。 桌子本身很简单:

CREATE TABLE WORDS( ID BIGINT AUTO_INCREMENT, WORD VARCHAR(128) NOT NULL UNIQUE, PRIMARY KEY(ID) ); 

我遇到的问题是这样的:当我做以下插入背靠背

 INSERT INTO WORDS(WORD) VALUES('Seth'); INSERT INTO WORDS(WORD) VALUES('seth'); 

第二次插入失败,违反约束条件(“重复input'关键字'的条件')”)。

如何获得对WORDUNIQUE约束是区分大小写的?

看起来像默认情况下 mysql是不区分大小写的 :

您可能需要使用区分大小写的sorting规则(例如utf8_cs)来创build列:

 CREATE TABLE WORDS ( ID BIGINT AUTO_INCREMENT, WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_cs NOT NULL UNIQUE, PRIMARY KEY(ID) ); 

默认情况下,MySQL忽略varchar上的大小写和尾随空格的差异。

如果您需要区分大小写,可以将该表更改为varchar(...) binary

使用show create table可以更好地理解MySQL如何将其转换为完整符号。

如果您需要注意尾部空格以及区分大小写,请使用varbinary而不是varchar

我有同样的问题,我解决它:

 CREATE TABLE WORDS( ID BIGINT AUTO_INCREMENT, WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, PRIMARY KEY(ID) ); 

我做了我的UNIQUE键varchar(1000)。 有效。

经过一些试验和错误,我发现任何大于或等于1100 varchar将失败。

澄清我没有尝试1001到1099之间。

希望这可以帮助。