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

rdrgkggo  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(400)

表查询:

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\u name\u uk”唯一约束,我希望第二行insert会抛出“duplicate entry”异常。但它允许在display\u name列中使用区分大小写的值。如何使其不区分大小写?

rsl1atfo

rsl1atfo1#

用utf8\u general\u ci替换utf8\u bin

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

rjjhvcjd2#

如果希望“bar”和“bar”被视为相同的值,这不是区分大小写,而是不区分大小写。
最简单的方法可能是使用不区分大小写的排序规则,如 utf8mb4 .

相关问题