MySQL表名大小寫敏感導致的問題

來源:互聯網
上載者:User

標籤:inf   tty   改變   href   markdown   自己   tor   search   文章   

  

最近在項目中遇到一個比較奇怪的小問題。在開發過程中自己測試沒有問題,但是提測後,測試的同時在測試一個功能時報錯了,日誌是:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘testdb.Emp‘ doesn‘t exist
  • 1

於是乎開啟資料庫用戶端,發現testdb資料庫有這張表,真是奇怪。項目本地測試還是沒問題,糾結了半天,才留意到代碼中表名是Emp,而資料庫中是emp。原來是表名大小寫敏感問題。之前一直沒有在意這個問題。 

變數lower_case_table_names

為什麼本地開發沒問題,但是測試環境就提示表不存在呢?因為本地的windows開發環境,預設是大小寫不敏感。而測試環境的linux是敏感的。 
本地windows我們執行命令,查看自己電腦中的mysql系統變數可以看到:

show variables like ‘%lower_case_table_names%‘;
  • 1

結果: 
 
值為1,表示是大小寫不敏感,而linux環境的mysql是0. 

修改變數lower_case_table_names

為什麼會出現這個問題,主要是因為開發與測試環境不一致導致的,這也是有時測試環境完全沒問題,一到生產就出詭異問題的原因之一。所以,我們除了讓測試同事認真測試外,最好本地和測試環境還是一致。 
對當前這個問題,我們直接修改SQL中的Empemp即可解決問題,但是為了根本解決問題,我們還須修改mysql的環境變數,也就是將lower_case_table_names的值改為0. 
修改方法: 
1. 找到mysql的安裝位置 
2. 找到主目錄下的my.ini設定檔 
3. 在[mysqld]節點下添加lower_case_table_names=0 
4. 重啟mysql服務 

在配置的時候,很可能遇到這些問題: 
Q:my.ini在哪? 
A:一般在安裝路徑下。之前我一直修改目錄下的my.ini,重啟還是無效。上網求助後,發現沒有使用這個配置,而是在任務管理、服務中右鍵屬性,看到可執行檔中指定的檔案: 
 
Q:為什麼修改了屬性後,服務啟動不了了。 
A:在一台電腦中MySQL成功啟動,但是另一台一直啟動不了。初步確定是作業系統的原因,一台是win7啟動不了。另一台win10能夠修改後啟動並生效。最終win7那台設定了2才啟動成功。 
原因:

https://dev.mysql.com/doc/refman/5.6/en/identifier-case-sensitivity.html 
Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows 

為什麼windows不能取0?

官方文檔給出了答案,說白了就是作業系統是不支援大小寫敏感的檔案系統。

You should not set lower_case_table_names to 0 if you are running MySQL on a system where the data directory resides on a case-insensitive file system (such as on Windows or OS X).

我們可以測試一下,在D盤建一個檔案,命名為test.txt,再建一個檔案夾叫Test.txt。我們會得到一串提示,作業系統把test和Test當做相同的字串了: 

在下面將取值範圍時,我們會看到0和2的區別。

 

變數lower_case_table_names的取值

取值範圍有三個,分別是0、1、2. 
1. 設定成0:表名按你寫的SQL大小寫儲存,大寫就大寫小寫就小寫,比較時大小寫敏感。 
2. 設定成1:表名轉小寫後儲存到硬碟,比較時大小寫不敏感。 
3. 設定成2:表名按你寫的SQL大小寫儲存,大寫就大寫小寫就小寫,比較時統一轉小寫比較。

這個選項不僅僅適用於表名的大小寫敏感,同樣適用於資料庫名和表別名。


更多的資料,可以參考官方文檔系統變數部分:

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names

文章標籤: mysql資料庫

MySQL表名大小寫敏感導致的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.