Je peux utiliser la méthode MySQL TRIM()
pour nettoyer les champs contenant des espaces blancs de début ou de fin avec un UPDATE
comme ceci:
UPDATE Foo SET field = TRIM(field);
J'aimerais vraiment voir les champs que cela aura un impact avant que cela ne soit exécuté. J'ai essayé mais retourne 0 résultat:
SELECT * FROM Foo WHERE field != TRIM(field);
Il semble que cela devrait fonctionner, mais ce n'est pas le cas.
Quelqu'un a une solution? Aussi, curieux de savoir pourquoi cela ne fonctionne pas ...
Comme indiqué sous Les types CHAR
et VARCHAR
:
Tous les classements MySQL sont de type
PADSPACE
. Cela signifie que toutes les valeursCHAR
etVARCHAR
dans MySQL sont comparées sans tenir compte des espaces de fin.
Dans la définition de l'opérateur LIKE
, le manuel indique:
En particulier, les espaces de fin sont significatifs, ce qui n'est pas vrai pour les comparaisons
CHAR
ouVARCHAR
effectuées avec=
opérateur:
Comme mentionné dans cette réponse :
Ce comportement est spécifié dans SQL-92 et SQL: 2008. À des fins de comparaison, la chaîne la plus courte est complétée à la longueur de la chaîne la plus longue.
Extrait du projet (8.2 <prédicat de comparaison>):
Si la longueur en caractères de X n'est pas égale à la longueur en caractères de Y, la chaîne plus courte est effectivement remplacée, à des fins de comparaison, par une copie d'elle-même qui a été étendue à la longueur de la chaîne plus longue par concaténation à droite d'un ou plusieurs caractères de pad, où le caractère de pad est choisi en fonction de CS. Si CS a la caractéristique NO PAD, alors le caractère de remplissage est un caractère dépendant de l'implémentation différent de n'importe quel caractère dans le jeu de caractères de X et Y qui rassemble moins que n'importe quelle chaîne sous CS. Sinon, le caractère du tampon est un <espace>.
Une solution:
SELECT * FROM Foo WHERE CHAR_LENGTH(field) != CHAR_LENGTH(TRIM(field))
SELECT *
FROM
`foo`
WHERE
(name LIKE ' %')
OR
(name LIKE '% ')
Voici un exemple avec RegEx
SELECT *
FROM
`foo`
WHERE
(name REGEXP '(^[[:space:]]|[[:space:]]$)')