1. 程式人生 > >linux系統下MySQL表名區分大小寫問題

linux系統下MySQL表名區分大小寫問題

log 技術分享 區分 table mes 查詢 http 網上 ted

問題如下:

技術分享

比如上圖中的PERSON表,查詢SQL語句中如果表名是小寫,就會報錯說person表不存在。

因為Linux環境下的MySQL數據庫的表名默認是區分大小寫的,可以查看Linux上的MySQL的配置文件/etc/my.cnf:

[[email protected]_219_131_centos tomcat7]# cat /etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to
prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [[email protected]_219_131_centos tomcat7]#

如果要使用數據庫表名不區分大小寫的話,就需要在[mysqld]下面添加一行配置,即 lower_case_table_names=1:

[[email protected]_219_131_centos tomcat7]# vi /
etc/my.cnf [mysqld] lower_case_table_names=1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

網上對該項配置的說明:

lower_case_table_names參數詳解:

其中 
0:區分大小寫,1:不區分大小寫 MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的: 1、數據庫名與表名是嚴格區分大小寫的; 2、表的別名是嚴格區分大小寫的; 3、列名與列的別名在所有的情況下均是忽略大小寫的; 4、變量名也是嚴格區分大小寫的; MySQL在Windows下都不區分大小寫。 3、如果想在查詢時區分字段值的大小寫,則:字段值需要設置BINARY屬性,設置的方法有多種: A、創建時設置: CREATE TABLE T( A VARCHAR(10) BINARY ); B、使用alter修改: ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY; C、mysql tableeditor中直接勾選BINARY項。

修改完配置之後,一定要重啟數據庫:

[[email protected]_219_131_centos tomcat7]# service mysqld restart
Stopping mysqld:  [  OK  ]
Starting mysqld:  [  OK  ]

然後使用Navicat工具重新連接MySQL數據庫,再次查詢perosn表,這時發現不管查詢SQL語句中的表名是大寫還是小寫都提示找不到person表了。

原因是修改配置之後,會導致原來的大寫的表名PERSON無法識別,所以這一點要特別註意。

解決辦法是:

(1)在修改配置之前一定先將所有表的表結構和表數據導出做備份;

(2)刪除原來的表;

(3)修改配置;

(4)將表結構和表數據導入。

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

技術分享

linux系統下MySQL表名區分大小寫問題