mysql設(shè)置大小寫不敏感的方法:1、打開并編輯“my.cnf”文件;2、查找“l(fā)ower_case_table_names”項,將該項的值設(shè)置為“1”;3、重啟mysql即可。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、mysql8版本、Dell G3電腦。
一、 原理與參數(shù)
mysql大小寫敏感配置與兩個參數(shù)相關(guān)?——?lower_case_file_system 和 lower_case_table_names
查看當(dāng)前mysql的大小寫敏感配置
show global variables like '%case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | ON | | lower_case_table_names | 0 | +------------------------+-------+
-
lower_case_file_system:表示當(dāng)前系統(tǒng)文件是否大小寫敏感(ON為不敏感,OFF為敏感),只讀參數(shù),無法修改。
-
lower_case_table_names:表示表名是否大小寫敏感,可以修改。
-
lower_case_table_names = 0時,mysql會根據(jù)表名直接操作,大小寫敏感。?
-
lower_case_table_names = 1時,mysql會先把表名轉(zhuǎn)為小寫,再執(zhí)行操作。?
-
二、 修改前準(zhǔn)備
由于lower_case_table_names = 1時,mysql會先把表名轉(zhuǎn)為小寫,如果建表時表名是大寫的,設(shè)置完大小寫不敏感后就會查不到。感覺類似oracle建表寫create table “test” 之后用select * from test就查不到,因為Oracle自動把test轉(zhuǎn)成了大寫。
所以我們需要先把庫里所有表名改為小寫。mysql中沒有自帶方法,可以寫個存儲過程修改。
DELIMITER?//?? ???? DROP?PROCEDURE?IF?EXISTS?lowercase?//?? CREATE?PROCEDURE?lowercase(IN?dbname?VARCHAR(200))?? BEGIN????? DECLARE?done?INT?DEFAULT?0;?? DECLARE?oldname?VARCHAR(200);?? DECLARE?cur?CURSOR?FOR?SELECT?table_name?FROM?information_schema.TABLES?WHERE?table_schema?=?dbname;?? DECLARE?CONTINUE?HANDLER?FOR?NOT?FOUND?SET?done?=?1;?? ? OPEN?cur;?? REPEAT?? FETCH?cur?INTO?oldname;?? SET?@newname?=?LOWER(oldname);?? ???? #IF?newname?equals?to?oldname,?do?nothing;?? #select?'a'??'A';?->?0?? #select?'a'??BINARY?'A';?->?1?? SET?@isNotSame?=?@newname??BINARY?oldname;?? IF?NOT?done?&&?@isNotSame?THEN? SET?@SQL?=?CONCAT('rename?table?',oldname,'?to?',@newname); PREPARE?tmpstmt?FROM?@SQL;?????? EXECUTE?tmpstmt;?????? DEALLOCATE?PREPARE?tmpstmt;?????? END?IF;?????? UNTIL?done?END?REPEAT;?????? CLOSE?cur;????? END?//?????? DELIMITER?; ? #調(diào)用存儲過程? #call?lowercase('TEST'); #TEST為你想要修改的數(shù)據(jù)庫的名稱
三、正式設(shè)置?
vi my.cnf文件,設(shè)置 lower_case_table_names = 1 ,重啟mysql后生效
vi?my.cnf #添加 lower_case_table_names?=?1
【相關(guān)推薦:mysql視頻教程】