1. 程式人生 > >MySQL 表名大小寫區分

MySQL 表名大小寫區分

最近要將生產環境阿里雲上的Mysql庫備份出來,放到另一份雲上,都是linux系統中,發現匯入成功後怎麼都查不到資料,但是匯入在本地的window環境中,是能夠查到資料的,後來仔細排查,才發現,MySQL表名在linux環境中是區分大小寫的,可通過配置忽略表明大小寫,而在window環境中是不區分大小寫的,故在此處記錄下。下面是網上參考的文章:

檢視大小寫區分
mysql> show variables like "%case%";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+


| lower_case_file_system | OFF   | 
| lower_case_table_names | 0     | 
+------------------------+-------+
2 rows in set (0.00 sec)




今天鬱悶死了,在LINUX下調一個程式老說找不到表,但是我明明是建了表的,在MYSQL的命令列下也可以查到,為什麼程式就找不到表呢?
  後來請教了一個老師才搞定,原來是LINUX下的MYSQL預設是要區分表名大小寫的,哎,弄了那麼舊,害死我了。
  讓MYSQL不區分表名大小寫的方法其實很簡單:
  1.用ROOT登入,修改/etc/my.cnf
  2.在[mysqld]下加入一行:lower_case_table_names=1

  3.重新啟動資料庫即可


今天測試的時候,遇到一些問題,明明看到資料,就是查不出來;後來發現,在linux下,mysql的表名區分大小寫,而在windows下是不區分,從windows下匯出的資料指令碼中使用的是小寫,
而Hibernate生成的sql中表名是大寫的,所以查不出資料。
google了一些資料,修改mysql的一個引數就可以了,如下:
在ubuntu下,/etc/mysql/my.cnf檔案中
[mysqld]的後面加
lower_case_table_names=1 
0,區分大小寫; 1,不區分
好像還有說在/etc/my.cnf,在ubuntu下,這個不能使用。
然後重啟mysql
sudo /etc/init.d/mysql restart

注:(下面內容摘自網上)
MYSQL在LINUX下資料庫名、表名、列名、別名大小寫規則如下: 
1.資料庫名與表名是嚴格區分大小寫的 
2.表的別名是嚴格區分大小寫的 
3.列名與列的別名在所有的情況下均是忽略大小寫的 
4.變數名也是嚴格區分大小寫的