美文网首页
MySQL,空字符串和空格字符串比较

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

作者: 沐一同学 | 来源:发表于2020-12-07 18:07 被阅读0次

问题:

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

相关文章

网友评论

      本文标题:MySQL,空字符串和空格字符串比较

      本文链接:https://www.haomeiwen.com/subject/doptgktx.html