SQL唯一varchar区分大小写的问题

Set*_*eth 54 mysql sql varchar case-sensitive unique-constraint

我正在尝试使用单词列表填充SQL表.表本身很简单:

CREATE TABLE WORDS(
  ID BIGINT AUTO_INCREMENT, 
  WORD VARCHAR(128) NOT NULL UNIQUE, 
  PRIMARY KEY(ID)
);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:当我执行以下插入时,背靠背

INSERT INTO WORDS(WORD) VALUES('Seth');
INSERT INTO WORDS(WORD) VALUES('seth');
Run Code Online (Sandbox Code Playgroud)

第二个插入失败,出现约束违规("键'WORD'的重复输入'seth'").

如何使UNIQUE约束WORD区分大小写?

Bil*_*sky 88

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

您可能需要使用区分大小写的排序规则创建列(例如utf8_bin):

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

  • 这样做了.谢谢.对于后来发现这个问题的人,我不得不使用'utf8_bin'排序规则,因为mysql没有'utf8_cs'. (28认同)
  • 对mysql的巨大失望:-("Seth"和"seth"不是同一个字符串!感谢您的帮助. (4认同)

Bry*_*eld 7

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

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

使用show create table以更好地了解MySQL的这个如何转换为完整的符号.

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