MySQL大小寫問題

MySQL大小寫問題

表名大小寫

mysql對於大小寫在windows上系統和Linux上系統不同。Linux默認狀況下區分大小寫,而在Windows下數據庫名、表名、列名、別名都不區分大小寫,即便設置lower_case_table_names=0,在查詢時仍是不會區分大小寫。只是在導入導出時會對大小寫有區別。緣由是各類操做系統的文件系統對大小寫實現上有所不一樣。WINDOWS的文件系統查詢時不區分文件大小寫。mysql

Linux上大小寫問題能夠經過配置進行修改。sql

mysql> show variables like 'lower%';
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
2 rows in set (0.01 sec)

lower_case_file_system:數據庫所在的文件系統對文件名大小寫敏感度。數據庫

  • ON 表示大小寫不敏感
  • OFF 表示敏感

lower_case_table_names:表名大小寫敏感度windows

  • 0 表示使用Create語句指定的大小寫保存文件
  • 1 表示大小寫敏感,文件系統以小寫保存
  • 2 表示使用Create語句指定的大小寫保存文件,但MySQL會將之轉化爲小寫 (當Linux設置爲2時,錯誤日誌顯示[Warning]

修改my.cnf後重啓數據庫操作系統

lower_case_table_names=1

查詢時強制區分大小寫 (字段數據大小寫)

前提: 若是默認爲大小寫不敏感日誌

不區分大小寫Sql代碼

SELECT * FROM table_name WHERE name LIKE 'a%';  
SELECT * FROM table_name WHERE name LIKE 'A%';

其結果是同樣的code

區分大小寫Sql代碼

爲了區分'A%'和'a%':blog

SELECT * FROM U WHERE binary name LIKE 'a%';  
SELECT * FROM U WHERE binary name LIKE 'A%';

僅僅多了一個binary,就能夠獲得不一樣的結果!ci

固然,若是須要建表時強制區分大小寫,能夠這麼寫:get

create  table  table_name(    
     name varchar (20) binary      
);

設置表或行的collation

還有一種方法就是在查詢時指定collation

  • _bin: 表示的是binary case sensitive collation,也就是說是區分大小寫的
  • _cs: case sensitive collation,區分大小寫
  • _ci: case insensitive collation,不區分大小寫

例如:

create table case_bin_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin; 
create table case_cs_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_general_cs; 
SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'F%'; 
SELECT * FROM case_test WHERE word LIKE 'f%' COLLATE latin1_bin;

參考

相關文章
相關標籤/搜索