共计 1048 个字符,预计需要花费 3 分钟才能阅读完成。
关于 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版本可能有不同的情况。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/1506966.htm