MySQL区分大小写

今天踩坑了,MySQL创建了一个唯一索引,唯一健冲突,冲突原因是:”字段内容值大小写MySQL不区分,当作同一条记录了处理了“。我来总结下:

目录

1:MySQL表面区分大小写

2:表字段内容区分大小写


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='乐杨俊测试';

举例子:

现在有个记录 

idappsourcepay_channel
1mtxxleyangjun_testweixin
2mtxxleyangjun_Testweixin

表 leyangjun_test_one方式下,第二条记录是插入不进去的,报错唯一键冲突

表leyangjun_test_two方式下,第二条记录是正常可以插入的,因为增加了:COLLATE=utf8mb4_bin(区分大小写)。

如果需要大小写敏感,需要将排序规则修改为utf8mb4_bin即可

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值