1. 程式人生 > >linux部署MySQL資料表名大小寫問題

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)將表結構和表資料匯入。

按照上面的步驟操作之後,再次查詢資料表,表名就不區分大小寫了。