MySQL 字符串比较不区分大小写
数据库 刘宇帅 5年前 阅读量: 1715
最近做了一个简单的短链接服务,短链接使用自增 id 转化为 62 进制(10 个数字+26个小写字母+26个大写字母),但是发现插入数据库报了索引插入重复。
展示
创建测试表
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`short_url` varchar(255) NOT NULL COMMENT '测试',
PRIMARY KEY (`id`),
UNIQUE KEY `short_url` (`short_url`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试表';
插入数据
mysql> insert into test(`short_url`) values('ff');
Query OK, 1 row affected (0.01 sec)
mysql> insert into test(`short_url`) values('fF');
ERROR 1062 (23000): Duplicate entry 'fF' for key 'short_url'
如上报了重复的 key 插入,这是因为我们上面创建的表的编码是 utf8mb4_unicode_ci,而 utf8mb4_unicode_ci 编码比较是不区分大小写的,所以我们需要一个区分大小写的编码,那就是 utf8mb4_bin。
修改字段编码
mysql> alter table test modify `short_url` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '测试';
Query OK, 1 row affected (0.12 sec)
Records: 1 Duplicates: 0 Warnings: 0
测试数据插入
mysql> insert into test(`short_url`) values('Ff');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test(`short_url`) values('FF');
Query OK, 1 row affected (0.00 sec)
如上大小写已区分。