讓 MySQL 在 Linux 下表名不區分大小寫(實為表名全小寫)

來源:互聯網
上載者:User

標籤:

把 Windows 下的應用部署到 Linux 下,使用到了 Quartz 叢集的特性,所以建了 MySql 的中間表,一啟動看到報錯:

Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn‘t retrieve trigger: Table ‘unmijob.QRTZ_TRIGGERS‘ doesn‘t exist [See nested exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘unmijob.QRTZ_TRIGGERS‘ doesn‘t exist]

用 MySQL 用戶端串連到那個資料庫,看到 qrtz_triggers 表確確實實是存在的,MySQL 也是安裝在 Linux 下的。在大小寫敏感的作業系統中,估摸著會不會是表名大小的因素呢? 於是把 qrtz_triggers 改為大寫的 QRTZ_TRIGGERS,再次啟動應用伺服器,這時候出現的是:

Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn‘t retrieve trigger: Table ‘unmijob.QRTZ_CRON_TRIGGERS‘ doesn‘t exist [See nested exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘unmijob.QRTZ_CRON_TRIGGERS‘ doesn‘t exist]

說明表 QRTZ_TRIGGERS 表是找到了,找不到下面的  QRTZ_CRON_TRIGGERS 表。這樣的現像面前說明在 Linux 下 MySQL 表明是區分大小寫是暴露無疑了,以前多是在 windows 下寫程式,而且代碼中的 sql 語句表明也都是用小寫,所以未碰到。現在 Quartz 偏喜歡大寫,問題也就這樣來了。

知道原因,找解決辦法就可有的放矢了,google mysql linux 表名不區分大小寫,答案立馬找到:

需要改 MySQL 的設定檔,Linux 下 MySQL 的設定檔可能是 /etc/my.cnf,或 /etc/mysql/my.cnf,這依賴於你的安裝方式。假如是 /etc/my.cnf,那麼執行

sudo vi /etc/my.cnf

在 [mysqld] 節中添加:

本文原始連結 http://unmi.cc/linux-mysql-lower-case-table-names/, 來自 隔葉黃鶯 Unmi Blog

lower_case_table_names=1

然後儲存,用 sudo /etc/init.d/mysql restart 重啟 MySQL 服務便讓 Linux 系統對錶名大小寫不敏感了。

其實準確來說不是說 Linux 對於 MySQL 表名忽略大小寫,而是應用上面的配置後,MySQL 服務程式會來自於應用程式裡的請求的表名轉換為小寫,如你查詢 select*  UNMI_TABLE,MySQL 會認為是查詢的 select * from unmi_table,所以在加入

lower_case_table_names=1

之前時你必須把表名都改為小寫。也就是在建立表時都用小寫名字,如果建立的表名為 UNMI_TABLE,那麼程式中無論是執行 select * from UNMI_TABLE 還是執行 select * from unmi_table 都會碰到類似下面的錯誤:

Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn‘t retrieve trigger: Table ‘unmijob.qrtz_triggers‘ doesn‘t exist [See nested exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘unmijob.qrtz_triggers‘ doesn‘t exist]

因為 MySQL 服務程式認為表名就是小寫 unmi_table,而在資料庫中的表名不是這樣子的。

而且此時在 MySQL 用戶端都無法把 QRTZ_TRIGGERS 改成 qrtz_triggers. 因為表名的大小寫是與檔案系統中的資料目錄下的 frm 檔案相對應的。


讓 MySQL 在 Linux 下表名不區分大小寫(實為表名全小寫)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.