latin1保存漢字致使不一樣的漢字被認爲「相等」mysql
mysql> SELECT NICKNAME FROM user WHERE nickname = ‘磊飛’;
+———-+
| NICKNAME |
+———-+
| 龍飛 |
| 龍飛 |
| 龍飛 |
| 龍飛 |
+———-+
4 rows in set (0.00 sec)sql
明明不一樣的漢字被認爲是相等的。咱們知道mysql的諸多collation有不少結尾是_ci的,表示大小寫不敏感。ide
mysql> select ‘a’='a’;
+———+
| ‘a’='a’ |
+———+
| 1 |
+———+
1 row in set (0.00 sec).net
mysql> select ‘a’='A’;
+———+
| ‘a’='A’ |
+———+
| 1 |
+———+
1 row in set (0.00 sec)orm
mysql> select ‘a’='b’;
+———+
| ‘a’='b’ |
+———+
| 0 |
+———+
1 row in set (0.00 sec)blog
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)ci
咱們看到latin1_swedish_ci,這就是形成「磊」和「龍」相等的緣由了。rem
怎麼樣讓大小寫敏感,而去掉這種不須要的「相等」?get
注意collate的用法it
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)