mysql在Linux下大小寫敏感設置


  默認情況下,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';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM