linux部署MySQL資料表名大小寫問題
專案在本地跑的時候沒問題,但是部署在Linux後,就報錯找不到相關資料表,但是檢視資料庫後發現明明存在,這是因為大小寫問題。Linux對大小寫是敏感的,尤其在開發quartz模組的時候,quartz內部查詢資料的語句是大寫的,如QRTZ_LOCKS、QRTZ_TRIGGERS等這些內部表。
解決方案:其實很簡單,讓它對大小寫不敏感即可,即在Linux上的MySQL的配置檔案/etc/my.cnf中加入一行程式碼:
lower_case_table_names=1。my.cnf檔案在下方會給完整程式碼。
注意事項:
雖然簡單,但是有一些需要注意的地方:
1.lower_case_table_names引數詳解:
其中 0:區分大小寫,1:不區分大小寫
MySQL在Linux下資料庫名、表名、列名、別名大小寫規則是這樣的:
1、資料庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變數名也是嚴格區分大小寫的;
MySQL在Windows下都不區分大小寫。
如果想在查詢時區分欄位值的大小寫,則:欄位值需要設定BINARY屬性,設定的方法有多種:
A、建立時設定:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
B、使用alter修改:
ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
C、mysql tableeditor中直接勾選BINARY項。
2.修改完配置之後,一定要重啟資料庫:
service mysqld restart
3.再次查詢資料表,這時發現不管查詢SQL語句中的表名是大寫還是小寫都提示找不到此表了。
原因是修改配置之後,會導致原來的大寫的表名無法識別,這一點要特別注意。
解決辦法是:
(1)在修改配置之前一定先將所有表的表結構和表資料匯出做備份;
(2)刪除原來的表;
(3)修改配置;
(4)將表結構和表資料匯入。
按照上面的步驟操作之後,再次查詢資料表,表名就不區分大小寫了。