mysql,space等于空字符串

时间:2016-01-14 05:56:06

标签: mysql-5.7

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

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

mstring(mstring&& rvalRef): arr(rvalRef.arr), size(rvalRef.size)
{
  rvalRef.arr = nullptr;
  rvalRef.size = 0;
}

有趣的是,

SELECT ' ' = '';
-> 1

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

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

2 个答案:

答案 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