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'关键字'的条件')”)。
如何获得对WORD
的UNIQUE
约束是区分大小写的?
看起来像默认情况下 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之间。
希望这可以帮助。