查看mysql版本:
[root@localhost logs]# mysql -V mysql Ver 14.14 Distrib 5.6.37, for linux-glibc2.12 (x86_64) using EditLine wrapper
lower_case_table_names參數詳解:
lower_case_table_names=1
其中0:區分大小寫,1:不區分大小寫
查詢當前設置:
mysql> show variables like '%lower%'; -------------- show variables like '%lower%' -------------- +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 1 | +------------------------+-------+ 2 rows in set (0.00 sec) mysql>
網上大多數的帖子的修改流程如下:
1、用root登錄,修改 /etc/my.cnf
2、在[mysqld]節點下,加入一行: lower_case_table_names=1
3、重啟MySQL : service mysql restart
在這個版本的mysql(5.7.18)下有個坑(其他版本沒試過,不知道有沒有),如果之前有大寫的表,那么修改參數后改表會提示不存在,而且也無法修改,你的應用就掛了!!!
原因如下:
如果在lower_case_table_names=0情況下已經導入了大量的表和數據,表名有大寫,有小寫,此時再換成lower_case_table_names=1會出錯。
解決辦法是在lower_case_table_names=0下將表名全部改成小寫的;如果有數據庫名稱中存在大寫字母,也要在此時改名,改名方法為新建一個小寫的數據庫, 再改表名:
假設源庫名是’ABC’,目標庫名是’abc’,
首先創建目標庫
mysql> create database abc;
獲取所有源庫的表名
mysql> use information_schema;
mysql> select table_name from tables where table_schema='ABC';
然后按照以下命令一個個修改
mysql> rename table ABC.T1 to abc.t1;
一個個執行下來之后表就轉到新的庫里面了.
—注意abc.t1中一定全是小寫字母;
全部改名之后,再設置lower_case_table_names=1,重啟MySQL