我花了2个小时来解决后端问题。
原因是空字符串等于空格:
mstring(mstring&& rvalRef): arr(rvalRef.arr), size(rvalRef.size)
{
rvalRef.arr = nullptr;
rvalRef.size = 0;
}
有趣的是,
SELECT ' ' = '';
-> 1
SELECT STRCMP(' ', '');
-> 0 /* means equal */
我可以阻止这个吗?这是一个设置吗?
答案 0 :(得分:6)
此失败的原因在此处ExcelExport.cs的文档中进行了解释:
根据CHAR和VARCHAR列中的值进行排序和比较 分配给列的字符集排序规则。
所有MySQL排序规则都是PADSPACE类型。这意味着所有CHAR, MySQL中的VARCHAR和TEXT值进行了比较而不考虑任何问题 尾随空格。在这种情况下,“比较”不包括 LIKE模式匹配运算符,尾随空格 显著。
解决此问题的一种方法是投射为BINARY
SELECT BINARY '' = ' ';
0
您还可以使用LIKE
:
SELECT '' LIKE ' ';
0
答案 1 :(得分:0)
不是普通的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