Trim funktioniert nicht
am 04.02.2006 16:35:32 von Stefan HeinrichsenHallo,
ich habe folgendes Problem ein Varchar-Feld hat Telefonnummern
gespeichert. Dabei sind irgendwie häufiger Leerzeichen an den Anfang
oder das Ende des Eintrages gerutscht.
MySQL und insbesondere Trim handhabt diese Leerzeichen nun vollkommen
anderst, als ich es erwartet hätte.
Mal ein paar Beispiele
1. Der Versuch die Leerzeichen global zu entfernen tut nichts.
mysql> UPDATE bestellungen SET tel=3DTRIM(tel);=20
Query OK, 0 rows affected (0.11 sec)
Rows matched: 22076 Changed: 0 Warnings: 0
2. Trim übersieht die Leerziechen DISTINCT bezieht sie aber mit ein.
mysql> SELECT DISTINCT tel FROM bestellungen=20
WHERE tel LIKE '%xxx%';
+----------------+
| tel |
+----------------+
| =A00621 xxx |
| =A00621 xxx=A0 |
| =A00621 xxx |
| 0621 xxx |
| =A00621 xxx =A0 |
| =A00621 xxx |
| =A00621 xxx =A0 |
+----------------+
7 rows in set (0.06 sec)
3. Zur Verdeutlichung.
mysql> SELECT DISTINCT CONCAT('--',TRIM(tel),'--')
FROM bestellungen WHERE tel LIKE '%xxx%';
+-----------------------------+
| concat('--',trim(tel),'--') |
+-----------------------------+
| --=A00621 xxx-- |
| --=A00621 xxx=A0-- |
| --=A00621 xxx -- |
| --0621 xxx-- |
| --=A00621 xxx =A0-- |
| --=A00621 xxx -- |
| --=A00621 xxx =A0-- |
+-----------------------------+
4. Ja es sind wirklich Leerzeichen (ASCII erkennt diese wiederum)
mysql> SELECT DISTINCT ASCII(tel) FROM bestellungen
WHERE tel LIKE'%xxx%';
+------------+
| ASCII(tel) |
+------------+
| 160 | (Leerzeichen)
| 48 | (0)
+------------+