mysql,空格等于空字符串

只花了我2个小时来解决我后端的问题。

原因是空字符串等于空格:

SELECT ' ' = '';
-> 1

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

有趣的是,

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

我能阻止这个吗? 这是一个设置吗?


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

根据分配给列的字符集归类对CHAR和VARCHAR列中的值进行排序和比较。

所有MySQL归类都是PADSPACE类型。 这意味着MySQL中的所有CHAR,VARCHAR和TEXT值都会进行比较,而不考虑任何尾随空格。 在此上下文中的“比较”不包括LIKE模式匹配运算符,其尾部空格是重要的。

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

SELECT BINARY '' = ' ';
0

你也可以使用LIKE

SELECT '' LIKE ' ';
0
链接地址: http://www.djcxy.com/p/89697.html

上一篇: mysql, space equals empty string

下一篇: Why there is the need of using regularization in machine learning problems?