一文说清:Mysql的大小写问题

1 表名(table_name)与列名(field_name)区分大小写

mysql表名(table_name)与列名(field_name)的大小写敏感配置,主要由两个参数控制:lower_case_file_systemlower_case_table_names

  • lower_case_file_system:ON -大小写不敏感OFF-大小写敏感
    【数据库在检索数据目录时候是否区分大小,只读参数,无法修改,由当前的文件系统决定】
  • lower_case_table_names:0-mysql会根据表名直接操作大小写敏感、1-mysql会先把表名转为小写,再执行操作
    【表示表名是否大小写敏感,可以修改】

1)查询配置(%lower_case%)

show global variables like '%lower_case%';

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 0     |
+------------------------+-------+

2)配置lower_case_file_system的说明

该配置无法修改,由当前文件系统决定,经测试:

  • windows下值为ON,即大小写不敏感
  • 大部分linux下值为OFF,即大小写敏感

3)修改配置lower_case_table_names

  • 设置lower_case_table_names

打开my.cnf文件,加入以下语句后重启

# 设置表名大小写不敏感
lower_case_table_names = 1

4)修改lower_case_table_names值0为1时的注意事项

在lower_case_table_names=0时使用大小写混用创建表名,再设置lower_case_table_names=1后,原创建的表使用时会提示不存在

  • 问题原因:因为lower_case_table_names=1时,会先把表名转为小写后再操作,而文件中根本不存在小写的表名文件,因此出错
  • 解决办法:如果要将lower_case_table_names从0修改为1时,应先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1

5)最佳实践

建议将lower_case_table_names值统一设置为0,在代码中对大小写进行严格区分

2 行数据区分大小写

mysql行数据的大小写敏感,由字符集决定,具体如下:

  • _ci:大小写不敏感
  • _cs:大小写敏感)
  • _bin:二元/大小写也敏感
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容