解决唯一索引不区分大小写的问题

问题背景:

表中有一个联合唯一索引(supplier_name, create_date)。
在插入的过程中,(ASD, 2022-02-03) 和 (asd, 2022-02-03)会被识别成同一个索引。原因是 唯一索引不区分大小写。

解决方案

将索引字段 supplier_name 的排序规则从 utf8_general_ci 修改为 utf8_bin。

ALTER TABLE `table_name` MODIFY supplier_name varchar(255) COLLATE utf8_bin comment '供应商名称';

分析

每种字符集都有一个默认的排序规则。
utf8 字符集的默认排序方式是 utf8_general_ci,即不区分大小写(case insensetive)。
utf8_bin 排序规则区分大小写,也区分重音字符。

-- 查看表所有字段的type,collation,key等信息
show full columns from `table_name`;
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!