MYSQL:如何使复合唯一约束不区分大小写

时间:2018-06-12 20:10:51

标签: mysql case-sensitive unique-constraint unique-key

表格查询:

CREATE TABLE `TESTING_TABLE` (
   `ID` char(36) COLLATE utf8_bin NOT NULL,
   `NAME` char(36) COLLATE utf8_bin NOT NULL,
   `DISPLAY_NAME` varchar(128) COLLATE utf8_bin NOT NULL,
   UNIQUE KEY `DISPLAY_NAME_UK` (`NAME`,`DISPLAY_NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

第一行插入:

INSERT INTO `TESTING_TABLE` (`ID`, `NAME`, `DISPLAY_NAME`) VALUES ('1', 'Foo', 'Bar');

第二行插入:

INSERT INTO `TESTING_TABLE` (`ID`, `NAME`, `DISPLAY_NAME`) VALUES ('2', 'Foo', 'bar');

我有' DISPLAY_NAME_UK'唯一约束,我希望第二行插入应该抛出一个"重复条目"例外。但它允许DISPLAY_NAME列中的区分大小写的值。如何使其不区分大小写?

2 个答案:

答案 0 :(得分:2)

将utf8_bin替换为utf8_general_ci

CREATE TABLE `TESTING_TABLE` (
`ID` char(36) COLLATE utf8_bin NOT NULL,
`NAME` char(36) COLLATE utf8_bin NOT NULL,
`DISPLAY_NAME` varchar(128) COLLATE utf8_general_ci NOT NULL,
UNIQUE KEY `DISPLAY_NAME_UK` (`NAME`,`DISPLAY_NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

答案 1 :(得分:1)

如果你想要" bar"和" Bar"被视为相同的值,这不是灵敏度,它的情况不敏感

最简单的方法可能是使用不区分大小写的排序规则,例如utf8mb4