今天踩坑了,MySQL创建了一个唯一索引,唯一健冲突,冲突原因是:”字段内容值大小写MySQL不区分,当作同一条记录了处理了“。我来总结下:
目录
1:MySQL表名区分大小写
可以通过:lower_case_table_names参数来设置
一 :修改方式
1:修改数据库参数文件:my.cnf
2:在mysqld下 添加或修改 lower_case_table_names = 1
3:重启数据库二 :参数值含义
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的unix,linux下lower_case_table_names默认值为 0
Windows下默认值是 1
Mac OS X下默认值是 2
三:查看修改
show variables like ‘lower_case_table_names’;
2:表字段内容区分大小写
-- 不区分大小写
CREATE TABLE `leyangjun_test_one` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`app` varchar(30) NOT NULL DEFAULT '' COMMENT '客户端|应该',
`source` varchar(30) NOT NULL DEFAULT '' COMMENT '订单来源',
`pay_channel` varchar(16) NOT NULL DEFAULT '' COMMENT '支付渠道(weixin、alipay)',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `un_idx_asps` (`app`,`source`,`pay_channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='乐杨俊测试';
-- 区分大小写
CREATE TABLE `leyangjun_test_two` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`app` varchar(30) NOT NULL DEFAULT '' COMMENT '客户端|应该',
`source` varchar(30) NOT NULL DEFAULT '' COMMENT '订单来源',
`pay_channel` varchar(16) NOT NULL DEFAULT '' COMMENT '支付渠道(weixin、alipay)',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `un_idx_asps` (`app`,`source`,`pay_channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='乐杨俊测试';
举例子:
现在有个记录
id | app | source | pay_channel |
1 | mtxx | leyangjun_test | weixin |
2 | mtxx | leyangjun_Test | weixin |
表 leyangjun_test_one方式下,第二条记录是插入不进去的,报错唯一键冲突
表leyangjun_test_two方式下,第二条记录是正常可以插入的,因为增加了:COLLATE=utf8mb4_bin(区分大小写)。
如果需要大小写敏感,需要将排序规则修改为utf8mb4_bin即可