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

你可能感兴趣的:(MySQL,空字符串和空格字符串比较)