MySQL大小写敏感问题lower_case_table_names & lower_case_file_

关于MySQL大小写敏感问题lower_case_table_names & lower_case_file_system

〇 lower_case_file_system
    该参数是用于描述data目录所在的操作系统是否为大小写敏感,该参数为bool类型,但无法修改。
    0 -- 大小写敏感 
    1 -- 大小写不敏感

    比如跑在linux上的都是OFF或者0。

〇 lower_case_table_names
    该参数为静态,可设置为0、1、2。

0 -- 大小写敏感。(Unix,Linux默认)
创建的库表将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的目录,create table AbCCC ...将会原样生成AbCCC.frm。
SQL语句也会原样解析。

1 -- 大小写不敏感。(Windows默认)
创建的库表时,MySQL将所有的库表名转换成小写存储在磁盘上。
SQL语句同样会将库表名转换成小写。
如需要查询以前创建的Test_table(生成Test_table.frm文件),即便执行select * from Test_table,也会被转换成select * from test_table,致使报错表不存在。

2 -- 大小写不敏感(OS X默认)
创建的库表将原样保存在磁盘上。
但SQL语句将库表名转换成小写。

修改lower_case_table_names导致的常见不良隐患:
如果在lower_case_table_names=0时,创建了含有大写字母的库表,改为lower_case_table_names=1后,则会无法被查到。

注意事项:
将默认的lower_case_tables_name为0设置成1,需先将已经存在的库表名转换为小写

1)针对仅表名存在大写字母的情况:
①、lower_case_tables_name=0时,执行rename table成小写
②、设置lower_case_tables_name=1,重启生效。

2)针对库名存在大写字母的情况:
①、lower_case_tables_name=0时,使用mysqldump导出,并删除老的数据库。
②、设置lower_case_tables_name=1,重启生效。
③、导入数据至实例,此时包含大写字母的库名已转换为小写。

转换操作需要自行测试,不同操作系统,不同MySQL版本可能有不同的情况。

相关推荐