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

 問題以下:mysql

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

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

[root@VM_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
[root@VM_219_131_centos tomcat7]# 

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

[root@VM_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

網上對該項配置的說明:tomcat

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項。

修改完配置以後,必定要重啓數據庫:socket

[root@VM_219_131_centos tomcat7]# service mysqld restart
Stopping mysqld:  [  OK  ]
Starting mysqld:  [  OK  ]

而後使用Navicat工具從新鏈接MySQL數據庫,再次查詢perosn表,這時發現無論查詢SQL語句中的表名是大寫仍是小寫都提示找不到person表了。工具

緣由是修改配置以後,會致使原來的大寫的表名PERSON沒法識別,因此這一點要特別注意。spa

解決辦法是:3d

(1)在修改配置以前必定先將全部表的表結構和表數據導出作備份;rest

(2)刪除原來的表;

(3)修改配置;

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

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

 

相關文章
相關標籤/搜索