一次偶然的機會,發現在登陸驗證時,改變用戶名的大小寫,同樣可以登錄成功,這是由於,當時使用的mysql資料庫對大小寫不敏感,查詢時總是能查詢到數據。一番查找資料,給出的原因是:在創建資料庫的時候,選擇了utf8_general_ci排序規則。 創建資料庫時,需要同時選擇字元集和排序規則,字元集大家都 ...
一次偶然的機會,發現在登陸驗證時,改變用戶名的大小寫,同樣可以登錄成功,這是由於,當時使用的mysql資料庫對大小寫不敏感,查詢時總是能查詢到數據。一番查找資料,給出的原因是:在創建資料庫的時候,選擇了utf8_general_ci排序規則。
創建資料庫時,需要同時選擇字元集和排序規則,字元集大家都知道是怎麼回事,那排序規則幹嘛用的呢?
排序規則:是指對指定字元集下不同字元的比較規則。其特征有以下幾點:
1、 兩個不同的字元集不能有相同的排序規則
2、 兩個字元集有一個預設的排序規則
3、 有一些常用的命名規則:如_ci結尾表示大小寫不敏感(caseinsensitive),_cs表示大小寫敏感(case sensitive),_bin表示二進位的比較(binary)。
我用的是5.6版本的mysql,對於這個版本是不支持utf8的cs排序規則,如果要想對大小寫敏感,可以使用_bin的排序規則。
與此同時,可以使用“show COLLATION;”查詢當前版本的資料庫支持的所有排序規則。使用 “show charset like 'utf8%';”進一步查看當前字元集的預設排序規則是什麼。
對於_ci的規則,表示不區分大小寫,如圖所示:
對於使用_bin排序規則的查詢如下:
對於已經創建好的表,可以是用如下命令進行修改(修改表結構的Collation屬性):
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
上面著重色部分分別表示表名和列名。