溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql怎么設(shè)置大小寫(xiě)不敏感

發(fā)布時(shí)間:2022-01-06 12:45:59 來(lái)源:億速云 閱讀:664 作者:柒染 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章將為大家詳細(xì)講解有關(guān)mysql怎么設(shè)置大小寫(xiě)不敏感,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

mysql設(shè)置大小寫(xiě)不敏感的方法:

1、打開(kāi)并編輯“my.cnf”文件;

2、查找“l(fā)ower_case_table_names”項(xiàng),將該項(xiàng)的值設(shè)置為“1”;

3、重啟mysql即可。

本教程操作環(huán)境:linux5.9.8系統(tǒng)、mysql8版本、Dell G3電腦。

一、 原理與參數(shù)

mysql大小寫(xiě)敏感配置與兩個(gè)參數(shù)相關(guān) —— lower_case_file_system 和 lower_case_table_names

查看當(dāng)前mysql的大小寫(xiě)敏感配置

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)文件是否大小寫(xiě)敏感(ON為不敏感,OFF為敏感),只讀參數(shù),無(wú)法修改。

  • lower_case_table_names:表示表名是否大小寫(xiě)敏感,可以修改。

    • lower_case_table_names = 0時(shí),mysql會(huì)根據(jù)表名直接操作,大小寫(xiě)敏感。

    • lower_case_table_names = 1時(shí),mysql會(huì)先把表名轉(zhuǎn)為小寫(xiě),再執(zhí)行操作。

二、 修改前準(zhǔn)備

由于lower_case_table_names = 1時(shí),mysql會(huì)先把表名轉(zhuǎn)為小寫(xiě),如果建表時(shí)表名是大寫(xiě)的,設(shè)置完大小寫(xiě)不敏感后就會(huì)查不到。感覺(jué)類(lèi)似Oracle建表寫(xiě)create table "test" 之后用select * from test就查不到,因?yàn)镺racle自動(dòng)把test轉(zhuǎn)成了大寫(xiě)。

所以我們需要先把庫(kù)里所有表名改為小寫(xiě)。mysql中沒(méi)有自帶方法,可以寫(xiě)個(gè)存儲(chǔ)過(guò)程修改。

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)用存儲(chǔ)過(guò)程 
#call lowercase('TEST');
#TEST為你想要修改的數(shù)據(jù)庫(kù)的名稱(chēng)

三、正式設(shè)置

vi my.cnf文件,設(shè)置 lower_case_table_names = 1 ,重啟mysql后生效

vi my.cnf
#添加
lower_case_table_names = 1

關(guān)于mysql怎么設(shè)置大小寫(xiě)不敏感就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI