Sam*_*son 5

不是第一个发现这令人沮丧的人.在这种情况下,LIKE用于文字字符串比较:

SELECT 'a' LIKE 'a    ';    //returns 0
Run Code Online (Sandbox Code Playgroud)


jsp*_*cal 3

SQL-92 和 SQL:2008 中指定了此行为。为了比较的目的,较短的字符串被填充到较长字符串的长度。

来自草案(8.2 <比较谓词>):

如果 X 的字符长度不等于 Y 的字符长度,则出于比较的目的,较短的字符串将被有效替换为已通过串联扩展到较长字符串的长度的自身副本位于一个或多个填充字符的右侧,根据 CS 选择填充字符。如果 CS 具有 NO PAD 特性,则填充字符是与 X 和 Y 字符集中的任何字符不同的依赖于实现的字符,该字符比 CS 下的任何字符串进行校对。否则,填充字符是 <space>。

除了其他优秀的解决方案之外:

select binary 'a' = 'a   '
Run Code Online (Sandbox Code Playgroud)