前言:對於mysql的大小寫敏感的影響,筆者在乙個小專案中深刻的體會到:當想要查詢一條資料時,總是出來兩條或多條,後來發現是大小寫敏感造成的原因,本文就該問題提出解決方案。
mysql是通過lower_case_table_names引數來控制大小寫敏感的,該引數在[mysqld]結點下。具體的含義筆者從官網截了一張圖。
注:①關於lower_case_table_names引數對錶名稱或資料庫名稱大小寫敏感的控制。
②unix下預設為0,也就是大小寫敏感的;windows下預設為1,不敏感;macos預設為2,儲存區分大小寫,但是在查詢時會轉換為小寫。
③對於在大小寫不敏感的系統(windows和macos)不能將該字段設定為0。
#1.linux下預設lower_case_table_names=0,對表明的大小寫是敏感的。注:筆者資料版本為5.7.22。
注:lower_case_file_system:off表示大小寫敏感,on表示大小寫不敏感。lower_case_table_names:0表示敏感,1表示不敏感。
#2.具體演示。
注:建立test表,並插入一條資料。
分析:對比兩組查詢,可以知linux下,mysql預設對錶名大小寫敏感。
分析:利用『aa』和『aa』查詢出相同的結果,說明查詢時對字段內容進行了轉換(大寫轉換成小寫),造成了這一現象。
分析:在查詢時,對欄位『name'也可查詢結果,表明在查詢時對字段的大小寫不敏感。
綜合以上幾個case可得出如下結論:
①linux預設情況下,對資料庫名和表名的大小寫是敏感的,因為linux系統本身對大小寫就敏感。
②字段內容大小寫不敏感。
③列名大小寫不敏感。
對於上述出現的問題,對實際的業務還是有相應影響的,因此應尋找對應的解決方案。
①建立表時,將字段標記為binary,二進位制大小寫是敏感的。
②在查詢條件的字段前加binary,但是不建議這麼做,因為會使字段索引失效。
③建表時設定校對規則(collate)。
collate規則:
*_bin: 表示的是binary case sensitive collation,也就是說是區分大小寫。
*_ci: case insensitive collation,不區分大小寫 。
④如果建表時校對規則未用*_bin,則可直接修改欄位的屬性。
alter只要在建立表的時候指定collate為utf8_bin,就可以實現大小寫敏感,如果建表時未指定,則可修改欄位的校對規則,也可以實現大小寫敏感。table test3 modify name varchar(20) collate utf8_bin;
by shawn chen,2018.7.2日,下午。
MySQL大小寫敏感
mysql大小寫敏感的解決方案 注 關於lower case table names引數對錶名稱或資料庫名稱大小寫敏感的控制。unix下預設為0,也就是大小寫敏感的 windows下預設為1,不敏感 macos預設為2,儲存區分大小寫,但是在查詢時會轉換為小寫。對於在大小寫不敏感的系統 window...
解決mysql大小寫敏感的問題
mysql如何設定大小寫敏感 1 linux下mysql安裝完後是預設 區分表名的大小寫,不區分列名的大小寫 2 用root帳號登入後,在 etc my.cnf 中的 mysqld 後新增新增lower case table names 1,重啟mysql服務,這時已設定成功 不區分表名的大小寫 l...
mysql 區分大小寫 大小寫敏感 配置
linux下mysql預設區分大小寫 windows下mysql預設不區分大小寫 檢視是否區分大小寫 lower case table names引數詳解 lower case table names 0 其中 0 區分大小寫,1 不區分大小寫 mysql在linux下資料庫名 表名 列名 別名大小...