linux系統下MySQL表名區分大小寫問題-轉載
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
[
如果要使用資料庫表名不區分大小寫的話,就需要在[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項。
修改完配置之後,一定要重啟資料庫:
service mysqld restart
然後使用Navicat工具重新連線MySQL資料庫,再次查詢perosn表,這時發現不管查詢SQL語句中的表名是大寫還是小寫都提示找不到person表了。
原因是修改配置之後,會導致原來的大寫的表名PERSON無法識別,所以這一點要特別注意。
解決辦法是:
(1)在修改配置之前一定先將所有表的表結構和表資料匯出做備份;
(2)刪除原來的表;
(3)修改配置;
(4)將表結構和表資料匯入。
按照上面的步驟操作之後,再次查詢person表,表名就不區分大小寫了。