Saltar al contenido

Campos de selección de MySQL que contienen espacios en blanco iniciales o finales

Solución:

Como se documenta en el CHAR y VARCHAR Tipos:

Todas las intercalaciones de MySQL son de tipo PADSPACE. Esto significa que todos CHAR y VARCHAR los valores en MySQL se comparan sin tener en cuenta los espacios finales.

En la definición de la LIKE operador, el manual dice:

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 esta respuesta:

Este comportamiento se especifica en SQL-92 y SQL: 2008. Para fines de comparación, la cadena más corta se rellena con la longitud de la cadena más larga.

Desde el borrador (8.2 ):

Si la longitud en caracteres de X no es igual a la longitud en caracteres de Y, entonces la cadena más corta se reemplaza efectivamente, a efectos de comparación, con una copia de sí misma 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 almohadilla, donde el carácter de almohadilla se elige en función de CS. Si CS tiene la característica NO PAD, entonces el carácter de almohadilla es un carácter dependiente de la implementación diferente de cualquier carácter en el conjunto de caracteres de X e Y que coteja menos que cualquier cadena en CS. De lo contrario, el carácter del pad es un .

Una solución:

SELECT * FROM Foo WHERE CHAR_LENGTH(field) != CHAR_LENGTH(TRIM(field))

SELECT *
FROM 
    `foo`
WHERE 
   (name LIKE ' %')
OR 
   (name LIKE '% ')

Aquí hay un ejemplo con RegEx

SELECT *
FROM 
    `foo`
WHERE 
   (name REGEXP '(^[[:space:]]|[[:space:]]$)')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *