首页 > 解决方案 > MYSQL:如何使复合唯一约束不区分大小写

问题描述

表查询:

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 列中使用区分大小写的值。如何使它不区分大小写?

标签: mysqlcase-sensitiveunique-constraintunique-key

解决方案


将 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;

推荐阅读