Linux系统下 MySQL 设置不区分大小写
lower_case_table_names
参数详解:
lower_case_table_names=1其中0:区分大小写,1:不区分大小写
查询当前设置:
mysql> show variables
like
'%lower%'
;
+
------------------------+-------+
| Variable_name | Value |
+
------------------------+-------+
| lower_case_file_system |
OFF
|
| lower_case_table_names | 1 |
+
------------------------+-------+
2
rows
in
set
(0.01 sec)
lower_case_file_system
表示当前系统文件是否大小写敏感,只读参数,无法修改。
ON 大小写不敏感
OFF 大小写敏感
lower_case_table_names
表示表名是否大小写敏感,可以修改。
lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。
网上大多数解决方案是:
1、使用root权限登录,修改配置文件 /etc/my.cnf
2、在[mysqld]节点下,加入一行: lower_case_table_names=1
3、重启MySQL : service mysqld.server restart
在部分版本的MySQL下,如果之前有大写的表,修改参数后改表会提示不存在,而且也无法修改,应用程序就操作不了。
问题剖析:
如果在lower_case_table_names=0情况下已经导入了大量的表和数据,表名有大写,有小写,此时再换成lower_case_table_names=1会出错。
解决办法:在lower_case_table_names=0时,将表名全部改成小写的;如果有数据库名称中存在大写字母,也需同时改名,改名方法为新建一个小写的数据库, 再改表名。(最方便的是直接使用MySQL界面客户端修改)
全部改名之后,再设置lower_case_table_names=1,重启MySQL。
更改后查询确认:
mysql> show variables
like
'%lower%'
;
+
------------------------+-------+
| Variable_name | Value |
+
------------------------+-------+
| lower_case_file_system |
ON
|
| lower_case_table_names | 0 |
+
------------------------+-------+