MySQL修改lower_case_table_names參數(shù)的方法實踐
環(huán)境:MySQL 5.7.25
起初創(chuàng)建環(huán)境時沒有要求表名稱不區(qū)分大小寫,后續(xù)應用使用提出要設置lower_case_table_names=1
的需求,期望表名不再區(qū)分大小寫。
修改這個參數(shù)需要重啟實例,另外一定要注意該參數(shù)修改會導致之前大寫存儲的表將無法識別,需要特殊處理。
1.默認區(qū)分大小寫的環(huán)境
默認在lower_case_table_names=0的情況下,表名是嚴格區(qū)分大小寫的,若查詢時大小寫弄混淆就會直接報錯表不存在,現(xiàn)象如下:
root@mysqldb 12:33: [test]> show tables; +----------------+ | Tables_in_test | +----------------+ | T1 | | t2 | +----------------+ 2 rows in set (0.00 sec) root@mysqldb 12:33: [test]> show variables like '%case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 0 | +------------------------+-------+ 2 rows in set (0.02 sec) root@mysqldb 12:34: [test]> select * from T1; Empty set (0.00 sec) root@mysqldb 12:34: [test]> select * from t2; Empty set (0.00 sec) root@mysqldb 12:34: [test]> select * from t1; ERROR 1146 (42S02): Table 'test.t1' doesn't exist root@mysqldb 12:34: [test]> select * from T2; ERROR 1146 (42S02): Table 'test.T2' doesn't exist root@mysqldb 12:34: [test]>
2.修改參數(shù)lower_case_table_names
在my.cnf配置文件中[mysqld]標簽的作用區(qū)域,增加`lower_case_table_names=1`的配置,然后重啟MySQL服務:
service mysqld restart
3.驗證表名區(qū)分大小寫情況
重啟實例后,確認參數(shù)已修改:
root@mysqldb 12:58: [test]> show variables like 'lower_case_table_names'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_table_names | 1 | +------------------------+-------+ 1 row in set (0.00 sec)
發(fā)現(xiàn)原表t2
,在參數(shù)修改后,通過t2和T2都可以訪問,滿足需求。
但是原表T1
,在參數(shù)修改后,通過t1和T1都無法訪問,細看報錯可以看到無論我們傳入T1還是t1,都是按照小寫的t1來解析。
root@mysqldb 12:46: [(none)]> use test Database changed root@mysqldb 12:46: [test]> show tables; +----------------+ | Tables_in_test | +----------------+ | T1 | | t2 | +----------------+ 2 rows in set (0.01 sec) root@mysqldb 12:46: [test]> select * from t1; ERROR 1146 (42S02): Table 'test.t1' doesn't exist root@mysqldb 12:47: [test]> select * from T2; Empty set (0.01 sec) root@mysqldb 12:47: [test]> select * from T1; ERROR 1146 (42S02): Table 'test.t1' doesn't exist root@mysqldb 12:47: [test]> select * from t2; Empty set (0.00 sec)
如果此時應用再重新創(chuàng)建T1表,就會被存儲為小寫的t1:
root@mysqldb 13:03: [test]> create table T1(id int); Query OK, 0 rows affected (0.08 sec) root@mysqldb 13:03: [test]> show tables; +----------------+ | Tables_in_test | +----------------+ | T1 | | t1 | | t2 | +----------------+ 3 rows in set (0.00 sec) root@mysqldb 13:03: [test]> select * from T1; Empty set (0.00 sec) root@mysqldb 13:03: [test]> select * from t1; Empty set (0.00 sec)
至于之前的T1,如果想要清理刪除,可改回lower_case_table_names=0后進行刪除。
總結:如果有不區(qū)分大小寫這樣的需求,在建庫配置時就要及早提出,不然后期更改不但要停機,還很可能需要特殊處理。
如果不幸遇到這樣的情況,操作之前先使用mysqldump進行導出備份,然后刪除所有含有大寫的表,成功修改參數(shù)后再進行導入即可。
到此這篇關于MySQL修改lower_case_table_names參數(shù)的文章就介紹到這了,更多相關MySQL lower_case_table_names修改參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IP處理函數(shù)inet_aton()和inet_ntoa()使用說明
IP處理函數(shù)inet_aton()和inet_ntoa()使用說明,需要的朋友可以參考下2012-03-03MySQL按時間統(tǒng)計數(shù)據(jù)的方法總結
在本篇MYSQL的內容里,我們給大家整理了關于按時間統(tǒng)計數(shù)據(jù)的方法內容,有需要的朋友們學習下。2019-02-02MySQL數(shù)據(jù)庫恢復(使用mysqlbinlog命令)
binlog是通過記錄二進制文件方式來備份數(shù)據(jù),然后在從二進制文件將數(shù)據(jù)恢復到某一時段或某一操作點。2011-08-08在SpringBoot中實現(xiàn)WebSocket會話管理的方案
在構建實時通信應用時,WebSocket 無疑是一個強大的工具,SpringBoot提供了對WebSocket的支持,本文旨在探討如何在 Spring Boot 應用中實現(xiàn) WebSocket 會話管理,我們將通過一個模擬的場景一步步展開討論,需要的朋友可以參考下2023-11-11Mysql數(shù)據(jù)庫的日志管理、備份與回復詳細圖文教程
備份的主要目的是災難恢復,備份還可以測試應用、回滾數(shù)據(jù)修改、查詢歷史數(shù)據(jù)、審計等,這篇文章主要給大家介紹了關于Mysql數(shù)據(jù)庫的日志管理、備份與回復的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08