Como se mencionó en the manual:
Todas las intercalaciones de MySQL son de tipo PADSPACE
. Esto significa que todos los valores CHAR
y VARCHAR
en MySQL se comparan sin tener en cuenta ningún espacio final.
En la definición del operador de LIKE
, se indica:
En particular, los espacios finales son significativos, lo que no es cierto para CHAR
o VARCHAR
comparaciones realizadas con el operador =
:
Como se menciona en this answer:
Este comportamiento se especifica en SQL-92 y SQL: 2008. Para fines de comparación, la cuerda más corta está acolchada a la longitud de la cadena más larga.
Desde el proyecto (8,2 < comparación predicado >):
Si la longitud en caracteres de X no es igual a la longitud en caracteres de Y, a continuación, la cadena más corta se sustituye eficazmente, a los efectos de comparación, con una copia de sí mismo que se ha extendido a la longitud de la cadena más larga por concatenación a la derecha de uno o más caracteres de pad, donde el carácter del pad se elige en función de CS. Si CS tiene la característica NO PAD, entonces el carácter pad es un carácter dependiente de la implementación, diferente de cualquier carácter en el conjunto de caracteres de X e Y que recopila menos que cualquier cadena bajo CS. De lo contrario, el carácter del panel es un espacio < >.
Además de las otras soluciones excelentes:
select binary 'a' = 'a '
+1, http://dev.mysql.com/doc/refman/5.0/en/char.html, cuando se recuperan los valores CHAR, los espacios finales se eliminan. –