mysql - 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 列中使用区分大小写的值。如何使它不区分大小写?
解决方案
将 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;
推荐阅读
- node.js - MERN Passport 反序列化在每个请求上调用两次
- powershell - 为什么我的脚本在 powershell ISE 中有效,但在 .ps1 文件中时无效?
- javascript - 当一个按钮被点击(点击)事件应该在事件之后执行
- excel - Excel VBA根据条件复制并粘贴到多个工作表
- scala - 在类构造中引用 trait 之外的抽象类型
- c# - 试图弄清楚如何在没有 LINQ 的情况下进行快速复杂的排序
- regex - Powershell3:识别并显示 ascii 文件中的最后 n 行
- python - 是什么让 python 的 itertools.groupby 这么快?
- javascript - 通过变量构建对象名称和属性
- c++ - 多个复制构造函数继承中的令人惊讶的行为