我花了两个小时来解决后端的一个问题。
原因是空字符串等于空格:
SELECT ' ' = '';
-> 1
SELECT STRCMP(' ', '');
-> 0 /* means equal */有趣的是,
SELECT '' REGEXP '[ ]';
-> 0
SELECT '' REGEXP ' ';
-> 0
SELECT ' ' REGEXP ' ';
-> 1我能阻止这一切吗?这是一个背景吗?
发布于 2016-01-14 06:02:11
这个失败的原因在这里的文档中得到了解释-- http://dev.mysql.com/doc/refman/5.0/en/char.html
根据分配给该列的字符集排序规则对CHAR和VARCHAR列中的值进行排序和比较。 所有MySQL排序规则都是PADSPACE类型的。这意味着对MySQL中的所有CHAR、VARCHAR和TEXT值进行比较,而不考虑任何尾随空格。此上下文中的“比较”不包括类似的模式匹配运算符,对于该运算符,尾随空格非常重要。
解决这一问题的一种方法是将其转换为BINARY
SELECT BINARY '' = ' ';
0您也可以使用LIKE
SELECT '' LIKE ' ';
0发布于 2018-12-29 19:18:34
我不是一个普通的MySQL用户,但我的MariaDB 10.2.9也有这个问题。我通过将VARCHAR列排序规则从utf8mb4_unicode_ci更改为utf8mb4_unicode_nopad_ci来解决这个问题。
SELECT '' = ' ' COLLATE utf8mb4_unicode_ci;
结果:1
SELECT '' = ' ' COLLATE utf8mb4_unicode_nopad_ci;
结果:0
https://stackoverflow.com/questions/34782594
复制相似问题