mysql,space等于空字符串

Seb*_*bas 8 mysql-5.7

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

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

SELECT ' ' = '';
-> 1

SELECT STRCMP(' ', '');
-> 0 /* means equal */
Run Code Online (Sandbox Code Playgroud)

有趣的是,

SELECT '' REGEXP '[ ]';
-> 0
SELECT '' REGEXP ' ';
-> 0
SELECT ' ' REGEXP ' ';
-> 1
Run Code Online (Sandbox Code Playgroud)

我可以阻止这个吗?这是一个设置吗?

bil*_*oah 7

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

CHAR和VARCHAR列中的值将根据分配给列的字符集排序规则进行排序和比较.

所有MySQL排序规则都是PADSPACE类型.这意味着MySQL中的所有CHAR,VARCHAR和TEXT值都会进行比较,而不考虑任何尾随空格.此上下文中的"比较"不包括LIKE模式匹配运算符,尾随空格很重要.

解决这个问题的一种方法是施展为 BINARY

SELECT BINARY '' = ' ';
0
Run Code Online (Sandbox Code Playgroud)

您还可以使用LIKE:

SELECT '' LIKE ' ';
0
Run Code Online (Sandbox Code Playgroud)