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');

第二次插入失败,违反了约束(“重复输入‘ seth’作为键‘ WORD’”)。

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

57010 次浏览

看起来 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)
);

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

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

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

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

我做了我的唯一键 varchar (1000)。它工作。

经过反复试验,我发现任何大于或等于1100的参数都会失败。

为了澄清,我没有尝试1001至1099。

希望这个能帮上忙。

试试这个:

ALTER TABLE WORDS CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;