1 表名(table_name)与列名(field_name)区分大小写
mysql表名(table_name)与列名(field_name)的大小写敏感配置,主要由两个参数控制:lower_case_file_system 和 lower_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:二元/大小写也敏感