MySQL,空字符串和空格字符串比较

问题:

SELECT * FROM T WHERE C1 = ' ';

返回结果错误;
明明没有' '的行,居然匹配一堆数据;

对比发现返回的都是''匹配的行

验证:

SELECT ' ' = '';
-> 1

SELECT STRCMP(' ', '');
-> 0 /* means equal */

有趣的是,

SELECT '' REGEXP '[ ]';
-> 0
SELECT '' REGEXP ' ';
-> 0
SELECT ' ' REGEXP ' ';
-> 1

google答案:

这个失败的原因在这里的文档 http://dev.mysql.com/doc/refman/5.0/en/char.html 中解释:

CHAR和VARCHAR列中的值按照排序和比较 到分配给列的字符集整理。

所有MySQL串联都是类型的PADSPACE.这意味着所有CHAR, 将MySQL中的varchar和TEXT值进行比较,而不考虑任何内容 在这种情况下,“比较”不包括 像pattern-matching运算符,尾随空间是 重要。

解决这个问题的一种方法是将其转换为BINARY

SELECT BINARY '' = ' ';
0

您还可以使用LIKE:

SELECT '' LIKE ' ';
0
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Mysql概述 数据库是一个易于访问和修改的信息集合。它允许使用事务来确保数据的安全性和一致性,并能快速处理百万条...
    彦帧阅读 14,049评论 10 460
  • 1、简介: mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my....
    且随疾风前行_i阅读 1,567评论 0 0
  • 官网:https://www.mysql.com/[https://www.mysql.com/]文档:https...
    saoraozhe3hao阅读 849评论 1 0
  • 前段时间公司内部博客上凯哥分享了一篇关于mysql字符集编码的文章,之前我对mysql字符集一块基本没有深究过,看...
    __七把刀__阅读 6,755评论 14 18
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,568评论 0 13

友情链接更多精彩内容