MySQL select champs contenant l'espace principal ou arrière

je peux utiliser le MySQL TRIM() méthode pour nettoyer les champs contenant un espace de début ou de fin avec un UPDATE comme ceci:

UPDATE Foo SET field = TRIM(field);

j'aimerais vraiment voir les champs, cela aura un effet avant d'exécuter. J'ai essayé ceci mais renvoie 0 résultats:

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

on dirait que ça devrait marcher mais ça ne marche pas.

Quelqu'un a une solution? Aussi, curieux de savoir pourquoi cela ne fonctionne pas...

19
demandé sur Dan Bracuk 2013-05-24 01:55:51

2 réponses

comme indiqué sous CHAR et VARCHAR Types:

toutes les collations MySQL sont de type PADSPACE. Cela signifie que tous les CHAR et

Dans la définition de la LIKE opérateur, le manuel indique:

En particulier, les espaces sont importants, ce qui n'est pas vrai pour CHAR ou VARCHAR comparaisons effectuées avec les = opérateur:

Comme indiqué dans le cette réponse:

ce comportement est spécifié dans SQL-92 et SQL:2008. Pour fins de comparaison, la plus courte chaîne collier à la longueur de la plus longue chaîne.

dans le projet (8.2 ):

Si la longueur en caractères de X n'est pas égale à la longueur en caractères de Y, alors la chaîne plus courte est effectivement remplacée, pour les besoins de la comparaison, avec une copie de lui-même qui a été étendue à la longueur de la chaîne plus longue par concaténation sur la droite d'un ou plusieurs caractères pad, où le caractère pad est choisi basé sur CS. Si CS a la caractéristique no PAD, alors le caractère pad est un caractère dépendant de la mise en œuvre différent de n'importe quel caractère dans le jeu de caractères de X et Y ça collate moins que n'importe quelle chaîne sous CS. Sinon, le caractère de remplissage est un .

une solution:

SELECT * FROM Foo WHERE CHAR_LENGTH(field) != CHAR_LENGTH(TRIM(field))
36
répondu eggyal 2017-05-23 10:31:35
SELECT *
FROM 
    `foo`
WHERE 
   (name LIKE ' %')
OR 
   (name LIKE '% ')
26
répondu user4035 2013-05-23 21:59:21