默認情況下,mysql在windows下是不區分大小寫的,但是mysql在linux下大小寫規則是這樣的:
1、數據庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、表中字符格式的數據是忽略大小寫的,這一點不合理!
針對上面幾點,比如按默認配置創建一個數據庫test和表dept,表中一條數據(數據庫mysql5.7):

那么當我們進行下面操作時,將會報錯:
-- 報錯1049,庫名是test USE Test; -- 報錯1146,表名是dept SELECT * FROM Dept; -- 報錯1054,表別名是d SELECT * FROM dept d WHERE D.`Id`=1; -- 不報錯,但是數據沒有區分大小寫(like也不區分) SELECT * FROM dept WHERE NAME='SALE';
這些大小寫敏感問題可能讓我們這些開發者有點不適應,解決方案如下:
針對上面的1和2兩點,我們可以在配置文件中的mysqld節點添加一行配置:
lower_case_table_names = 1
參數解釋:0:區分大小寫 1:不區分大小寫
順帶提一下,這里說下這個配置文件,先進入mysql的主目錄,在目錄下會有個my.cnf文件,打開查看里面有沒有mysqld節點配置,我這里是沒有的,里面是:
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
想必這兩個指的是mysql配置文件的目錄,然后分別進入這兩個目錄,發現/etc/mysql/mysql.conf.d/目錄下的mysqld.cnf文件里有mysqld節點配置,然后將上面配置加上(存在則修改)即可:

如果都沒有找到mysqld節點,那直接在my.cnf中加上mysqld節點,再將上面的配置加上(存在則修改)即可
修改完成需要重啟下mysql服務:service mysql restart
mysql8只能在數據庫初始化時才有效,數據庫創建好之后就不能修改大小寫敏感設置了,這一點着實有點坑人
第3點是正常的,我們也是希望列名與列的別名不區分大小寫,但是第4點太不正常了,解決方案如下:
如果我們還沒有建表,那么可以在建表時指定列設置BINARY屬性,即區分大小寫,如上面創建dept表:
CREATE TABLE `test`.`dept`( `Id` INT(11) NOT NULL AUTO_INCREMENT, `Name` VARCHAR(100) BINARY NOT NULL, `Desc` VARCHAR(1000) BINARY, PRIMARY KEY (`Id`) );
如果我們表已經創建好了,可以使用Alter命令修改BINARY屬性:
ALTER TABLE dept MODIFY COLUMN `Name` VARCHAR(100) BINARY NOT NULL;
還有,如果我們不想修改BINARY屬性,我們可以在查詢的時候,在查詢條件前加BINARY屬性:
SELECT * FROM dept WHERE BINARY NAME='SALE';
