MySQL大小寫補坑記

2022-01-11 18:34:01 字數 1401 閱讀 5909

背景:由於專案開始時資料庫設計經驗不足,資料庫名和部分資料表名都含有大寫字母。但問題是,linux上資料庫名和表名是區分大小寫的,而windows上是不區分大小寫的。結果就是在看本地的資料庫的時候,對著寫的**是小寫的表名,後來傳到伺服器上卻發現報錯,幾經審查才發覺是表名的大小寫不統一的問題。真是天坑啊,坑了自己也坑了小夥伴。怎麼辦呢?**已經比較多了,不太可能一下子就把**裡面的表名都改過來。網上看到說設定 lower_case_table_names 可以使linux上的資料庫表名不區分大小寫,那就試試吧。

action1:直接修改伺服器上 lower_case_table_names=1並重啟 ,結果**掛掉了,說找不到資料庫!而本地通過mysql-front連線到伺服器,顯示有小寫的 awzthink,但是點進去卻說 "awzthink"資料庫不存在 這樣的話。第一次嘗試失敗,只能把配置先改回來,**繼續執行。

分析:這樣看來,似乎**本來用的大寫awzthink和遠端工具用的全小寫awzthink都找不到那個資料庫,那就想到直接把資料庫名直接改為全小寫。但是mysql並沒有提供修改資料庫名的功能,所以只能新建資料庫以及配置資料庫使用者,然後把所有資料表複製過去,再修改**中的資料庫配置。因為白天**有一定流量,於是把這項任務安排是深夜。

action2:是夜月黑風高,在伺服器上把資料表複製到新的資料庫中去,修改**中的資料庫配置(就只有一行),然後修改資料庫自動備份指令碼,上傳。ok,**執行正常,資料匯出來檢視也沒有出入。再次嘗試設定 lower_case_table_names=1並重啟,結果那些有大寫字母的表還是查詢不出來,只好把此配置改回來。

分析:到這一步,資料庫名已經改為小寫,雖說對**優化還是沒什麼幫助,但想要設定lower_case_table_names還是得必須經過這一步,就是必要不充分條件。對於為什麼配置這個選項還是沒有把傳說中的大小寫問題修好,還是要詳細了解lower_case_table_names這個引數是做什麼用的。

分析

action3:再到凌晨,先截圖儲存現在的資料庫表名,在**低峰期修改表名為小寫,再修改這個配置項,然後重啟mysql。注意修改表名到重啟mysql成功之前這一段時間,**執行是會報錯的。重啟mysql之後,**就可以正常執行了。而**中的sql語句表名比較多而繁雜,可以對著截圖以後慢慢改。

end:掃地完畢,小夥伴們可以安心地寫mysql了,不用再煩惱大小寫問題了。對於原來**中的大寫表名,等閒一點再批量查詢修改吧。

tips附:修改lower_case_tables_names配置項的方法》

1、root使用者登入,vi /etc/my.cnf

2、找到 [mysqld],在裡面加入一行 lower_case_table_names=1

3、重啟資料庫 service mysqld restart

MySQL大小寫補坑記

背景 由於專案開始時資料庫設計經驗不足,資料庫名和部分資料表名都含有大寫字母。但問題是,linux上資料庫名和表名是區分大小寫的,而windows上是不區分大小寫的。結果就是在看本地的資料庫的時候,對著寫的 是小寫的表名,後來傳到伺服器上卻發現報錯,幾經審查才發覺是表名的大小寫不統一的問題。真是天坑...

mysql限制大小寫 mysql對大小寫的限制問題

今天研發人員問我,mysql對大小寫有限制嗎?我想都沒想,說沒限制。過了一會兒,研發人員告訴我說linux下是有限制的。我頓時有種打自己臉的感覺。對於自己不確定的問題,一定得想清楚,查明白了再說。在windows和mac os中,lower case tables name的預設值是1.如果只是在乙...

mysql 區分大小寫 大小寫敏感 配置

linux下mysql預設區分大小寫 windows下mysql預設不區分大小寫 檢視是否區分大小寫 lower case table names引數詳解 lower case table names 0 其中 0 區分大小寫,1 不區分大小寫 mysql在linux下資料庫名 表名 列名 別名大小...