I can use the MySQL
TRIM() method to cleanup fields containing leading or trailing whitespace with an
UPDATE like so:
UPDATE Foo SET field = TRIM(field);
I would like to actually see the fields this will impact before this is run. I tried this but returns 0 results:
SELECT * FROM Foo WHERE field != TRIM(field);
Seems like this should work but it does not.
Anyone have a solution? Also, curious why this does not work…
As documented under The
All MySQL collations are of type
PADSPACE. This means that all
VARCHARvalues in MySQL are compared without regard to any trailing spaces.
In the definition of the
LIKE operator, the manual states:
As mentioned in this answer:
This behavior is specified in SQL-92 and SQL:2008. For the purposes of comparison, the shorter string is padded to the length of the longer string.
From the draft (8.2 <comparison predicate>):
If the length in characters of X is not equal to the length in characters of Y, then the shorter string is effectively replaced, for the purposes of comparison, with a copy of itself that has been extended to the length of the longer string by concatenation on the right of one or more pad characters, where the pad character is chosen based on CS. If CS has the NO PAD characteristic, then the pad character is an implementation-dependent character different from any character in the character set of X and Y that collates less than any string under CS. Otherwise, the pad character is a <space>.
SELECT * FROM Foo WHERE CHAR_LENGTH(field) != CHAR_LENGTH(TRIM(field))
SELECT * FROM `foo` WHERE (name LIKE ' %') OR (name LIKE '% ')