MySQL修改lower_case_table_names參數(shù)的方法實(shí)踐
環(huán)境:MySQL 5.7.25
起初創(chuàng)建環(huán)境時(shí)沒(méi)有要求表名稱不區(qū)分大小寫(xiě),后續(xù)應(yīng)用使用提出要設(shè)置lower_case_table_names=1的需求,期望表名不再區(qū)分大小寫(xiě)。
修改這個(gè)參數(shù)需要重啟實(shí)例,另外一定要注意該參數(shù)修改會(huì)導(dǎo)致之前大寫(xiě)存儲(chǔ)的表將無(wú)法識(shí)別,需要特殊處理。
1.默認(rèn)區(qū)分大小寫(xiě)的環(huán)境
默認(rèn)在lower_case_table_names=0的情況下,表名是嚴(yán)格區(qū)分大小寫(xiě)的,若查詢時(shí)大小寫(xiě)弄混淆就會(huì)直接報(bào)錯(cuò)表不存在,現(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]標(biāo)簽的作用區(qū)域,增加`lower_case_table_names=1`的配置,然后重啟MySQL服務(wù):
service mysqld restart
3.驗(yàn)證表名區(qū)分大小寫(xiě)情況
重啟實(shí)例后,確認(rèn)參數(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ù)修改后,通過(guò)t2和T2都可以訪問(wèn),滿足需求。
但是原表T1,在參數(shù)修改后,通過(guò)t1和T1都無(wú)法訪問(wèn),細(xì)看報(bào)錯(cuò)可以看到無(wú)論我們傳入T1還是t1,都是按照小寫(xiě)的t1來(lái)解析。
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)
如果此時(shí)應(yīng)用再重新創(chuàng)建T1表,就會(huì)被存儲(chǔ)為小寫(xiě)的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后進(jìn)行刪除。
總結(jié):如果有不區(qū)分大小寫(xiě)這樣的需求,在建庫(kù)配置時(shí)就要及早提出,不然后期更改不但要停機(jī),還很可能需要特殊處理。
如果不幸遇到這樣的情況,操作之前先使用mysqldump進(jìn)行導(dǎo)出備份,然后刪除所有含有大寫(xiě)的表,成功修改參數(shù)后再進(jìn)行導(dǎo)入即可。
到此這篇關(guān)于MySQL修改lower_case_table_names參數(shù)的文章就介紹到這了,更多相關(guān)MySQL lower_case_table_names修改參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)
在MySQL啟動(dòng)時(shí)會(huì)檢查當(dāng)前系統(tǒng)的時(shí)區(qū)并根據(jù)系統(tǒng)時(shí)區(qū)設(shè)置全局參數(shù)system_time_zone的值,下面這篇文章主要給大家介紹了關(guān)于如何永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)的相關(guān)資料,需要的朋友可以參考下2022-08-08
關(guān)于MySql 10038錯(cuò)誤的完美解決方法(三種)
本文給大家?guī)?lái)三種有關(guān)mysql報(bào)10038錯(cuò)誤的解決方法,每種方法都非常不錯(cuò),需要的朋友參考下2016-09-09
詳解如何在阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫(kù)
這篇文章主要介紹了詳解如何在阿里云服務(wù)器安裝Mysql數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式
本文介紹了在MySQL中UNION和JOIN兩種多表查詢的方式,包括它們的適用場(chǎng)景、語(yǔ)法和特性,JOIN用于關(guān)聯(lián)數(shù)據(jù),而UNION用于合并具有相同結(jié)構(gòu)但無(wú)直接關(guān)系的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2024-11-11
Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析
這篇文章主要介紹了Mysql復(fù)制表三種實(shí)現(xiàn)方法及grant解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
MySQL4 File ‘c:\mysql\share\charsets\?.conf’ not found (Errc
File ‘c:\mysql\share\charsets\?.conf’ not found (Errcode: 22) Character set ‘#33′ is not a compiled character set and is not specified in the ‘c:\mysql\share\charsets\Index’ file2013-08-08
MySQL中字段的實(shí)際長(zhǎng)度的實(shí)現(xiàn)示例代碼
MySQL字段的存儲(chǔ)長(zhǎng)度不僅取決于數(shù)據(jù)類型,還受字符編碼和存儲(chǔ)內(nèi)容的影響,CHAR和VARCHAR字段可以使用LENGTH()和CHAR_LENGTH()函數(shù)獲取長(zhǎng)度信息,下面就來(lái)具體介紹一下2024-09-09

