程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL大小寫敏感說明,mysql大小寫

MySQL大小寫敏感說明,mysql大小寫

編輯:MySQL綜合教程

MySQL大小寫敏感說明,mysql大小寫


經常遇到的問題,一些不是特別重要但是又比較郁悶的事情。例如今天這個MySQL大小寫敏感。 先上測試結果。

Linux環境下,不是windows平台下。區別很大。注意。

一圖勝千言   mysql> show create table Ac; +-------+-------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table                                                                                                            | +-------+-------------------------------------------------------------------------------------------------------------------------+ | Ac    | CREATE TABLE `Ac` (   `a` varchar(20) DEFAULT NULL,   `c` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)   mysql> mysql> insert into Ac  values ('1q','1q'); Query OK, 1 row affected (0.00 sec)   mysql> insert into Ac  values ('1Q','1Q'); Query OK, 1 row affected (0.00 sec)   mysql> select * from Ac WHERE a='1q'; +------+------+ | a    | c    | +------+------+ | 1q   | 1q   | | 1Q   | 1Q   | +------+------+ 2 rows in set (0.00 sec)   mysql> select * from AC ; ERROR 1146 (42S02): Table 'test.AC' doesn't exist mysql> select * from Ac  where A='1Q'; +------+------+ | a    | c    | +------+------+ | 1q   | 1q   | | 1Q   | 1Q   | +------+------+ 2 rows in set (0.00 sec)   如上的結果能反應說明以下結論。   MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:   1、數據庫名與表名是嚴格區分大小寫的;   2、表的別名是嚴格區分大小寫的;   3、列名與列的別名在所有的情況下均是忽略大小寫的;       4、字段內容默認情況下是大小寫不敏感的。   mysql中控制數據庫名和表名的大小寫敏感由參數lower_case_table_names控制,為0時表示區分大小寫,為1時,表示將名字轉化為小寫後存儲,不區分大小寫。 mysql> show variables like '%case%'; +------------------------+-------+ | Variable_name          | Value | +------------------------+-------+ | lower_case_file_system | OFF   | | lower_case_table_names | 0     | +------------------------+-------+ 2 rows in set (0.00 sec)   修改cnf配置文件或者編譯的時候,需要重啟服務。      MySQL存儲的字段是不區分大小寫的。這個有點不可思議。尤其是在用戶注冊的業務時候,會出現笑話。所以還是嚴格限制大小寫敏感比如好。   如何避免字段內容區分大小寫。就是要新增字段的校驗規則。 可以看出默認情況下字段內容是不區分大小寫的。大小寫不敏感。   mysql> create table aa (a varchar(20) BINARY  , c varchar(20)) ; Query OK, 0 rows affected (0.10 sec)   mysql> show create table aa; +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table                                                                                                                                                | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ | aa    | CREATE TABLE `aa` (   `a` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,   `c` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)   mysql> select * from aa; +------+------+ | a    | c    | +------+------+ | a    | C    | | a    | C    | | A    | c    | +------+------+ 3 rows in set (0.00 sec)   mysql> select * from aa where a = 'a'; +------+------+ | a    | c    | +------+------+ | a    | C    | | a    | C    | +------+------+ 2 rows in set (0.00 sec)   mysql> select * from aa where a = 'A'; +------+------+ | a    | c    | +------+------+ | A    | c    | +------+------+ 1 row in set (0.00 sec)   原因如下: 字段值的大小寫由mysql的校對規則來控制。提到校對規則,就不得不說字符集。字符集是一套符號和編碼,校對規則是在字符集內用於比較字符的一套規則  . 一般而言,校對規則以其相關的字符集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束 。比如 utf8字符集,utf8_general_ci,表示不區分大小寫,這個是utf8字符集默認的校對規則;utf8_general_cs表示區分大小寫,utf8_bin表示二進制比較,同樣也區分大小寫 。   記錄下!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved