latin1保存漢字導致不同的漢字被認爲“相等”

  latin1保存漢字導致不同的漢字被認爲“相等”

 

mysql> SELECT NICKNAME  FROM user WHERE nickname = ‘磊飛’;
+———-+
| NICKNAME |
+———-+
| 龍飛     |
| 龍飛     |
| 龍飛     |
| 龍飛     |
+———-+
4 rows in set (0.00 sec)

明明不同的漢字被認爲是相等的。我們知道mysql的諸多collation有很多結尾是_ci的,表示大小寫不敏感。

mysql> select ‘a’='a’;
+———+
| ‘a’='a’ |
+———+
|       1 |
+———+
1 row in set (0.00 sec)

mysql> select ‘a’='A’;
+———+
| ‘a’='A’ |
+———+
|       1 |
+———+
1 row in set (0.00 sec)

mysql> select ‘a’='b’;
+———+
| ‘a’='b’ |
+———+
|       0 |
+———+
1 row in set (0.00 sec)

mysql> show table status like ‘user’;
+———-+——–+———+————+———-+—————-+————-+—————–+————–+———–+—————-+———————+———————+———————+——————-+———-+—————-+———+
| Name     | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time          | Collation         | Checksum | Create_options | Comment |
+———-+——–+———+————+———-+—————-+————-+—————–+————–+———–+—————-+———————+———————+———————+——————-+———-+—————-+———+
| user | MyISAM |      10 | Dynamic    | 17705707 |             70 |  1251800492 | 281474976710655 |   1211700224 |         0 |           NULL | 2009-12-22 01:43:26 | 2011-11-10 13:46:03 | 2011-11-10 13:49:05 | latin1_swedish_ci |     NULL | NULL           |         |
+———-+——–+———+————+———-+—————-+————-+—————–+————–+———–+—————-+———————+———————+———————+——————-+———-+—————-+———+
1 row in set (0.00 sec)

我們看到latin1_swedish_ci,這就是造成“磊”和“龍”相等的原因了。

怎麼樣讓大小寫敏感,而去掉這種不需要的“相等”?

注意collate的用法

mysql> SELECT `NICKNAME`  FROM user WHERE nickname = (‘磊飛’ collate latin1_bin);
Empty set (0.00 sec)

mysql> SELECT `NICKNAME`  FROM user WHERE nickname = (‘龍飛’ collate latin1_bin);
+———-+
| NICKNAME |
+———-+
| 龍飛     |
| 龍飛     |
| 龍飛     |
| 龍飛     |
+———-+
4 rows in set (0.00 sec)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章