linux下Mysq表名的大小寫問題解析

這些天把項目都轉移到新的Linux服務器上來,發現老是報沒法找到表的錯誤。html

ssh進去mysql下:mysql

而後發現臥槽有啊。。。linux

回來發現輸出信息均爲未找到「T_USER」大寫字樣。回來想多是用mybatis寫的原生SQL語句致使的。sql

因此查閱了資料發現:http://www.ahlinux.com/mysql/11302.html 數據庫

更改linux下的mysql讀取表的方式應該能夠行得通。服務器

因此按照文章進入my.cnf中去更改。
mybatis

更改後發現問題解決了。ssh

在linux系統中,mysql數據庫的庫名、表名、列名、別名大小寫規則:
  一、數據庫名與表名是嚴格區分大小寫的;
  二、表的別名是嚴格區分大小寫的;
  三、列名與列的別名在全部的狀況下均是忽略大小寫的;
  四、變量名也是嚴格區分大小寫的;
 
MySQL在Windows下都不區分大小寫。spa

所以,在不一樣操做系統中爲了能使程序和數據庫都能正常運行,最好的辦法是在設計的時候都轉爲小寫,可是若是在設計的時候已經規範化大小寫了,那麼在Windows環境下只要對數據庫的配置作下改動就好了,具體操做以下:操作系統

在MySQL的配置文件中my.ini [mysqld] 中增長一行
  lower_case_table_names = 1
  參數解釋:
  0:區分大小寫
  1:不區分大小寫
在 MySQL 中,數據庫和表對就於那些目錄下的目錄和文件。於是,操做系統的敏感性決定數據庫和表命名的大小寫敏感。這就意味着數據庫和表名在 Windows 中是大小寫不敏感的,而在大多數類型的 Unix 系統中是大小寫敏感的。

奇怪的是列名與列的別名在全部的狀況下均是忽略大小寫的,而表的別名又是區分大小寫的。

要避免這個問題,你最好在定義數據庫命名規則的時候就所有采用小寫字母加下劃線的組合,而不使用任何的大寫字母。

或也能夠強制以 -O lower_case_table_names=1 參數啓動 mysqld(若是使用 --defaults-file=...\my.cnf 參數來讀取指定的配置文件啓動 mysqld 的話,你須要在配置文件的 [mysqld] 區段下增長一行 lower_case_table_names=1)。

這樣MySQL 將在建立與查找時將全部的表名自動轉換爲小寫字符(這個選項缺省地在 Windows 中爲 1 ,在 Unix 中爲 0。從 MySQL 4.0.2 開始,這個選項一樣適用於數據庫名)。

當更改這個選項時,必須在啓動 mysqld 前首先將老的表名轉換爲小寫字母。

即若是但願在數據庫裏面建立表的時候保留大小寫字符狀態,則應該把這個參數置0: lower_case_table_names=1 。
不然,一樣的sqldump腳本在不一樣的操做系統下最終導入的結果不同(在Windows下全部的大寫字符都變成小寫了)。
 
問題:
在LINUX下調一個程序總提示找不到表,明明是建了表的,在MYSQL的命令行下也能夠查到,爲何程序就找不到表呢?

原來是LINUX下的MYSQL默認是要區分表名大小寫。

讓MYSQL不區分表名大小寫的方法:
1,用ROOT登陸,修改/etc/my.cnf
2,在[mysqld]下加入一行:lower_case_table_names=1
3,重啓mysql數據庫,使配置生效:service mysqld restart

相關文章
相關標籤/搜索