Linux環(huán)境下設(shè)置MySQL表名忽略大小寫的方法小結(jié)
說明
本文檔適用于docker容器運行的MySQL,修改MySQL表名忽略大小寫。
一、摘要
在MySQL中,表名的大小寫敏感性取決于操作系統(tǒng)和MySQL的配置。在Unix/Linux系統(tǒng)上,表名通常是區(qū)分大小寫的,而在Windows系統(tǒng)上則通常是不區(qū)分大小寫的。由于之前MySQL未設(shè)置忽略表名大小寫導(dǎo)致數(shù)據(jù)查詢失敗等問題。
二、查看服務(wù)器上MySQL情況
方式一:通過Linux方式
查看MySQL是否忽略了表名大小寫,先登錄MySQL(mysql -uroot -p),再通過命令查看目前MySQL忽略表名的情況(SHOW VARIABLES like "lower_case_table_names";)

方式二:借助可視化工具(Navicat)
連上服務(wù)器上對應(yīng)的MySQL服務(wù),新建查詢,如下圖所示:

三、MySQL設(shè)置忽略表名大小寫的參數(shù)(lower_case_table_names)
lower_case_table_names 可以設(shè)置為以下三個值之一:
0:區(qū)分大小寫。數(shù)據(jù)庫和表名在存儲和比較時都區(qū)分大小寫。在 Unix 和 Linux 系統(tǒng)上,這是默認值。
1:不區(qū)分大小寫。數(shù)據(jù)庫和表名在存儲和比較時都不區(qū)分大小寫。在 Windows 系統(tǒng)上,這是默認值。但請注意,即使設(shè)置為 1,在某些情況下(如使用 InnoDB 存儲引擎和 CREATE TABLE 語句中的引號),MySQL 仍然可能區(qū)分大小寫。
2:表名在存儲時區(qū)分大小寫,但在比較時不區(qū)分。這個設(shè)置很少使用,因為它可能導(dǎo)致混淆和不一致的行為。
注意:在安裝MySQL過程中,只有在初始化的MySQL情況下,更改lower_case_table_names的值。
四、網(wǎng)上解決方案
方法一:只修改my.cnf
1.添加lower_case_table_names=1
在服務(wù)器上找到my.conf文件,由于我是采取docker compose部署的MySQL,因此修改MySQL的配置文件后啟動方式因自己安裝的方式而異。
#忽略表名大小寫 lower_case_table_names=1
在 [mysqld] 部分新增

2.保存并退出
3.重啟MySQL
問題:
問題描述:Different lower_case_table_names settings for server ('1') and data dictionary ('0').
出現(xiàn)問題是在重啟MySQL容器的時候報錯。
方法二:臨時設(shè)置
注:重啟MySQL會失效
1.登錄MySQL
2.設(shè)置lower_case_table_names
SET GOLBAL lower_case_table_names = 1;
3.刷新權(quán)限
FLUSH PRIVILEGES;
問題:
1238 - Variable 'lower_case_table_names' is a read only variable

lower_case_table_names 是一個只讀的系統(tǒng)變量,這意味著你不能在 MySQL 服務(wù)器運行時動態(tài)地更改它的值。這個變量必須在 MySQL 服務(wù)器啟動時從配置文件(通常是 my.cnf 或 my.ini,取決于你的操作系統(tǒng)和安裝方式)中讀取,或者在首次初始化數(shù)據(jù)目錄時設(shè)置。因此這個方案行不通。
五、解決方案(docker方式)
1.先備份MySQL數(shù)據(jù)庫數(shù)據(jù)
(1)通過命令去備份
mysqldump -uroot -p[密碼] [數(shù)據(jù)庫] > [備份的sql]
(2)采用工具備份,如Navicat
2.停止MySQL
3.找到MySQL數(shù)據(jù)存放路徑
4.備份數(shù)據(jù)目錄
cp -ar datadir datadir_old
5.清空之前的數(shù)據(jù)目錄
rm -rf datadir/*
6.配置docker compose的MySQL
注:如果之前存在先刪除之前舊的運行MySQL容器。
在docker-compose.yml中配置MySQL。
mysql:
restart: always
image: mysql:8.0.35
volumes:
- ./mysql/datadir:/var/lib/mysql
- ./mysql/conf/my.cnf:/etc/my.cnf
environment:
- "MYSQL_ROOT_PASSWORD=xxx"
- "MYSQL_DATABASE=xxx"
- "MYSQL_USER=xxx"
- "MYSQL_PASSWORD=xxx"
- "TZ=Asia/Shanghai"
command: --lower_case_table_names=1 # 添加這一行來設(shè)置lower_case_table_names
ports:
- "3306:3306"配置如下:

7.重新用docker compose命令運行一個MySQL容器
docker compose up -d mysql
8.查看啟動日志
docker logs 容器名/容器id
若沒出現(xiàn)錯誤即為,設(shè)置MySQL忽略表名大小寫成功。
9.將數(shù)據(jù)恢復(fù)
(1)將導(dǎo)出的數(shù)據(jù)原封導(dǎo)入到MySQL中
(2)將備份的數(shù)據(jù)目錄全部復(fù)制到現(xiàn)在MySQL目錄
10.驗證

到此,MySQL更新lower_case_table_names=1,忽略表名大小寫完成。
以上就是Linux環(huán)境下設(shè)置MySQL表名忽略大小寫的方法小結(jié)的詳細內(nèi)容,更多關(guān)于 Linux MySQL表名忽略大小寫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL創(chuàng)建新用戶、增加賬戶的2種方法及使用實例
這篇文章主要介紹了MySQL創(chuàng)建新用戶、增加賬戶的2種方法及使用實例,本文同時也介紹了更新和修改密碼的方法,需要的朋友可以參考下2014-12-12
mysql優(yōu)化之慢查詢分析+explain命令分析+優(yōu)化技巧總結(jié)
這篇文章主要介紹了mysql優(yōu)化之慢查詢分析,explain命令分析,優(yōu)化技巧總結(jié),需要的朋友可以參考下2023-02-02
Mysql update多表聯(lián)合更新的方法小結(jié)
這篇文章主要介紹了Mysql update多表聯(lián)合更新的方法小結(jié),通過實例代碼給大家介紹了mysql多表關(guān)聯(lián)update的語句,感興趣的朋友跟隨小編一起看看吧2020-02-02
利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)
Xtrabackup 是percona的一個開源項目,可以熱備份innodb ,XtraDB,和MyISAM(會鎖表),可以看做是InnoDB Hotbackup的免費替代品2013-04-04
Mysql中報錯函數(shù)floor()函數(shù)和rand()函數(shù)的配合使用及原理詳解
在項目中的SQL語句中遇到幾個數(shù)值處理函數(shù),看著有些懵,就小小的總結(jié)一下,這篇文章主要給大家介紹了關(guān)于Mysql中報錯函數(shù)floor()函數(shù)和rand()函數(shù)的配合使用及原理的相關(guān)資料,需要的朋友可以參考下2022-07-07

