我有一个查询,该查询仅使用=
表中的数据如下:
"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 ';
在这些特定的上下文中,此查询返回匹配的行:
在上下文的其他组合的 ALL 中,第二个查询返回匹配行的 NO :
从这些帖子中,我知道预期的mysql行为是填充字符串,直到它们的长度相同以进行比较:
...并且我可以使用更简单的查询在上面列出的所有上下文中确认此行为
select 'a' = 'a ';
-> 1
注意:所有有问题的数据库/表/列都具有字符集utf8mb4
和排序规则utf8mb4_general_ci
所以...。为什么有所不同?为什么这么多的上下文在尾随空白上不匹配,为什么有些不匹配,以及按照mysql和SQL标准的规则,它们应该匹配?
我还能检查什么以发现环境之间的差异?
谢谢!