latin1保存汉字导致不同的汉字被认为“相等”

转载自MySQLOPS 数据库与运维自动化技术分享


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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值