MySQL 字符串比较不区分大小写

数据库 刘宇帅 5年前 阅读量: 1713

最近做了一个简单的短链接服务,短链接使用自增 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)

如上大小写已区分。

提示

功能待开通!


暂无评论~