MySQL大小写敏感的解决方案

不同的MySQL版本有不同的默认设定,具体情况需要具体分析。

mysql是通过lower_case_table_names参数来控制大小写敏感的,该参数在[mysqld]节点下。具体的含义笔者从官网截了一张图。

① 关于lower_case_table_names参数对表名称或数据库名称大小写敏感的控制。

② Unix下默认为0,也就是大小写敏感的;Windows下默认为1,不敏感;macOS默认为2,存储区分大小写,但是在查询时会转换为小写。

③ 对于在大小写不敏感的系统(Windows和macOS)不能将该字段设置为0。

二、出现的问题

Linux下默认lower_case_table_names=0,对表明的大小写是敏感的。注:笔者数据版本为5.7.22。

lower_case_file_system:OFF表示大小写敏感,ON表示大小写不敏感。lower_case_table_names:0表示敏感,1表示不敏感。

lower_case_file_system是一个只读参数,无法被修改,这个参数是用来告诉你在当前的系统平台下,是否对文件名大小写敏感。

创建test表,并插入一条数据

# 案例一

分析:对比两组查询,可以知linux下,mysql默认对表名大小写敏感。

# 案例二

分析:利用‘Aa’和‘aa’查询出相同的结果,说明查询时对字段内容进行了转换(大写转换成小写),造成了这一现象。

# 案例三

分析:在查询时,对字段‘Name'也可查询结果,表明在查询时对字段的大小写不敏感。

综上,可以得出如下结论:

① linux默认情况下,对数据库名和表名的大小写是敏感的,因为linux系统本身对大小写就敏感。

② 字段内容大小写不敏感。

③ 列名大小写不敏感。

对于上述出现的问题,对实际的业务还是有相应影响的,因此应寻找对应的解决方案。

三、字段内容及列名大小写不敏感的解决方案

① 创建表时,将字段标记为binary,二进制大小写是敏感的。

② 在查询条件的字段前加binary,但是不建议这么做,因为会使字段索引失效。

③ 建表时设置校对规则(collate)。

collate规则:

  • *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写。
  •  *_ci: case insensitive collation,不区分大小写 。

④  如果建表时校对规则未用*_bin,则可直接修改字段的属性。

alter table test3 modify name varchar(20) collate utf8_bin;

四、总结

只要在创建表的时候指定collate为utf8_bin,就可以实现大小写敏感,如果建表时未指定,则可修改字段的校对规则,也可以实现大小写敏感。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库的大小写敏感性可以根据配置进行设置。默认情况下,MySQL在Windows操作系统上是不区分大小写的,而在Unix和macOS上是区分大小写的。这是因为在Windows中,文件系统默认是大小写敏感的,而在Unix和macOS中,文件系统默认是大小写敏感的。因此,MySQL大小写敏感性与操作系统和配置有关。 如果想要将已建立的数据库和表从大小写敏感转换为不敏感,可以按照以下步骤进行: 1. 使用mysqldump命令将数据库数据导出。 2. 在my.cnf配置文件中将lower_case_table_names参数设置为1,并重启MySQL数据库。 3. 使用导出的数据将数据库数据导入到MySQL数据库中。 需要注意的是,对于大小写敏感的系统(如Windows和macOS),不能将lower_case_table_names参数设置为0。此外,在Linux默认情况下,数据库名和表名是大小写敏感的,而字段内容和列名是大小写敏感的。如果需要设置匹配字段值大小写敏感,可以使用binary标记或设置校对规则(collate)来实现。 总结起来,MySQL数据库的大小写敏感性可以通过配置文件和设置校对规则来进行控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL| MySQL大小写敏感问题](https://blog.csdn.net/u011479200/article/details/89002141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【转】MySQL大小写敏感解决方案](https://blog.csdn.net/C_chuxin/article/details/122471582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值