Trim funktioniert nicht

Trim funktioniert nicht

am 04.02.2006 16:35:32 von Stefan Heinrichsen

Hallo,

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)
+------------+

Re: Trim funktioniert nicht

am 04.02.2006 18:04:13 von Weinzierl Stefan

Stefan Heinrichsen schrieb:
[...]

> 4. Ja es sind wirklich Leerzeichen (ASCII erkennt diese wiederum)
Nö,tut es nicht...

> mysql> SELECT DISTINCT ASCII(tel) FROM bestellungen
> WHERE tel LIKE'%xxx%';
> +------------+
> | ASCII(tel) |
> +------------+
> | 160 | (Leerzeichen)
> | 48 | (0)
> +------------+

SELECT ASCII(" ");
-> 32

Du suchts:
SELECT TRIM(CHAR(160) FROM tel) FROM bestellungen;

Stefan

Re: Trim funktioniert nicht

am 04.02.2006 18:23:51 von Helmut Chang

Stefan Heinrichsen schrieb:

> 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.

Grundsätzlich seltsam, weil VARCHAR vor 5.0.3 automatisch trimmte:


> 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)

Nicht ganz. Ein Leerzeichen hat den ASCII-Code 32. Das hingegen ist ein
"geschütztes" Leerzeichen (aka non-breaking space):



schweigt
sich leider dazu aus, ob dieses von TRIM() als Space behandelt wird. ich
denke aber eher nicht.

Fragt sich nur, wie das überhaupt in die Datenbank kam.

gruss, heli