我花了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)
我可以阻止这个吗?这是一个设置吗?
这个失败的原因在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)
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |