mysql中如何設(shè)置大小寫(xiě)不敏感
mysql設(shè)置大小寫(xiě)不敏感
原理與參數(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é)類似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ù)的名稱
正式設(shè)置
vi my.cnf文件,設(shè)置 lower_case_table_names = 1 ,重啟mysql后生效
vi my.cnf #添加 lower_case_table_names = 1
mysql大小寫(xiě)不敏感,設(shè)置不生效的解決
最近mysql測(cè)試環(huán)境碰到環(huán)境碰到了一個(gè)問(wèn)題。希望mysql大小寫(xiě)不敏感,但是設(shè)置大小寫(xiě)敏感不生效?
首先介紹一下我的mysql版本,mysql使用docker安裝。mysql版本為:5.7.22。
解決思路
1:查詢msyql的大小寫(xiě)敏感參數(shù)
show global variables like '%lower_case%';
若lower_case_table_names = 0,則大小寫(xiě)敏感,需要設(shè)置參數(shù)。
2:更改mysql配置文件參數(shù)
因mysql容器啟動(dòng)命令有做了配置文件映射,直接修改配置文件參數(shù)即可。
mysql容器啟動(dòng)命令
docker run --name mysql5.7.22_1502 -v /softdata/mysql/config:/etc/mysql/ -v /softdata/mysql/data:/var/lib/mysql ?-p 1502:3306 -e MYSQL_ROOT_PASSWORD=zyc1233 -d mysql:5.7.22?
修改/softdata/mysql/config/my.cnf 如下:
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 lower_case_table_names=1 [client] default-character-set=utf8 [mysql] default-character-set=utf8
3:再次查詢msyql的大小寫(xiě)敏感參數(shù)
show global variables like '%lower_case%'; #還是顯示lower_case_table_names = 0
4:查詢mysql日志
通過(guò)查詢mysql日志,發(fā)現(xiàn)以下信息
Warning: World-writable config file ‘/etc/mysql/my.cnf' is ignored #mysql的配置文件被忽略了,why?
注意兩個(gè)單詞World-writable,意味著mysql的配置文件任何人都可寫(xiě),mysql認(rèn)為這不安全,于是忽略了這個(gè)配置文件。
5:更改mysql的配置文件
chmod 644 /softdata/mysql/config #my.cnf設(shè)置為當(dāng)前用戶可讀寫(xiě),其他用戶不可寫(xiě),只讀.
6:重啟mysql,再次查詢msyql的大小寫(xiě)敏感參數(shù)
docker restart mysql show global variables like '%lower_case%';#lower_case_table_names =1 #mysql 設(shè)置大小寫(xiě)不敏感成功
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySql優(yōu)化之InnoDB,4GB內(nèi)存,多查詢的my.ini中文配置方案詳解
本文是一個(gè)針對(duì) 4G 內(nèi)存系統(tǒng)(主要運(yùn)行只有 InnoDB 表的 MySQL 并使用幾個(gè)連接數(shù)執(zhí)行復(fù)雜的查詢)的MySQL配置文件方案2018-03-03sql format()函數(shù)的用法及簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇sql format函數(shù)()的用法及簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05對(duì)MySQL慢查詢?nèi)罩具M(jìn)行分析的基本教程
這篇文章主要介紹了對(duì)MySQL慢查詢?nèi)罩具M(jìn)行分析的基本教程,文中提到的Query-Digest-UI這個(gè)基于B/S的圖形化查看工具非常好用,需要的朋友可以參考下2015-12-12MySQL OOM 系列三 擺脫MySQL被Kill的厄運(yùn)
這篇文章主要介紹了MySQL OOM 系列三 擺脫MySQL被Kill的厄運(yùn) ,需要的朋友可以參考下2016-07-07通過(guò)代碼實(shí)例了解頁(yè)面置換算法原理
這篇文章主要介紹了通過(guò)代碼實(shí)例了解頁(yè)面置換算法原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08mysql函數(shù)split功能實(shí)現(xiàn)
mysql 5.* 的版本現(xiàn)在沒(méi)有split 函數(shù),但有些地方會(huì)用,在這里就簡(jiǎn)單記錄一下2012-09-09MySQL中LAG()函數(shù)和LEAD()函數(shù)的使用
這篇文章主要介紹了MySQL中LAG()函數(shù)和LEAD()函數(shù)的使用,包括窗口函數(shù)的基本用法,LAG()和LEAD()函數(shù)介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08