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即可

    原文作者:乐杨俊
    原文地址: https://blog.csdn.net/leyangjun/article/details/123355796
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞