为什么MySQL有时将字符串与结尾的空格匹配,有时却不匹配?

时间:2018-12-10 23:36:12

标签: mysql whitespace

我有一个查询,该查询仅使用=

在查找表中查找字符串

表中的数据如下:

 "some_column"  | "my_string_val"
---------------------------------------
 'returned_val' | 'STRING_OF_INTEREST'

这里的字符串文字只有字母字符:

SELECT some_column FROM my_lookup_table
  WHERE my_string_val = 'STRING_OF_INTEREST';

在所有数据库和客户端中,此查询返回匹配的行。

这里的字符串文字有几个结尾的空白字符:

SELECT some_column FROM my_lookup_table
WHERE my_string_val = 'STRING_OF_INTEREST ';

在这些特定的上下文中,此查询返回匹配的行:

  • 环境:
    1. dev
  • 数据库:
    1. 读写
  • 客户:
    1. PHP cli
    2. PHPStorm内置sql客户端

在上下文的其他组合的 ALL 中,第二个查询返回匹配行的 NO

  • 环境:
    1. dev
    2. 产品
  • 数据库:
    1. 读写
    2. 只读
  • 客户:
    1. PHP cli
    2. PHPStorm内置客户端
    3. DataGrip-与PHPStorm相同的驱动程序
    4. MySQL命令行客户端
    5. Sequel Pro应用程序

从这些帖子中,我知道预期的mysql行为是填充字符串,直到它们的长度相同以进行比较:

...并且我可以使用更简单的查询在上面列出的所有上下文中确认此行为

select 'a' = 'a   ';

-> 1

注意:所有有问题的数据库/表/列都具有字符集utf8mb4和排序规则utf8mb4_general_ci

所以...。为什么有所不同?为什么这么多的上下文在尾随空白上不匹配,为什么有些不匹配,以及按照mysql和SQL标准的规则,它们应该匹配?

我还能检查什么以发现环境之间的差异?

谢谢!

0 个答案:

没有答案