[SQL] mehrere Leerzeichen mit replace ersetzen

Hallo zusammen,

ich verwende einen MySQL 4.1.13 Server und versuche über phpMyAdmin 2.8.2.4 Ersetzungen in einem Text vorzunehmen. Die Tabelle ist im Format „utf_unicode_ci“. Der REPLACE-Befehl funktioniert bei anderen Ersetzungen wunderbar, allerdings muss ich jetzt 14 Leerzeichen durch 10 ersetzt werden.

Ich habe es mit folgenden Befehl versucht:

UPDATE [tabellenname] SET alltext=REPLACE
(alltext,'\> ', '\> ') WHERE id = [TestID]

Der Befehl wird ohne Fehlermeldung ausgeführt, aber es wird nichts verändert, obwohl die entsprechende Zeichenfolge sicher im Feld „alltext“ enthalten ist.

Wäre für Tipps sehr dankbar.

Hallo supilator,

wenn ich mich nicht verzählt habe, sind im zu ersetzenden String aber 15 Leerzeichen vorhanden?! Wenn Du sowas häufiger machen solltest wäre das folgende Statement wohl besser geeignet (hier ist besonders das REPEAT gemeint).

UPDATE [tabellenname] 
 SET alltext=REPLACE
 (alltext,
 concat('\>',repeat(' ',14),''), 
 concat('\>',repeat(' ',10),''), 
 ) 
 WHERE id = [TestID]

MfG Georg V.

Hallo Georg,

vielen Dank für den Tipp. Das vereinfacht den Code sehr.

Ich habe aber mittlerweile entdeckt, dass mein Problem woanders lag. Es scheint sich dabei um ein anders codiertes Leerzeichen zu handeln (vermutlich damit es von Webbrowsern nicht ausgeblendet wird) und so wurde es bei der Suche nicht gefunden. Selbst wenn ich es direkt aus phpMyAdmin rauskopiert habe ging die Codierung offenbar über die Browseranzeige verloren. Erst mit SQL-Export und Kopieren aus dem normalen Editor habe ich (für mich völlig gleich aussehend) die richtige Folge von Leerzeichen dort reinsetzen können.

Für alle die mal so ein Problem haben: Ich konnte es über die Quelltextanzeige von Mozilla aufdecken, indem ich dort die Anzeige-Codierung umgestellt habe und sah, dass es kein normales Leerzeichen ist.

Hi!

Es scheint sich dabei um ein anders codiertes
Leerzeichen zu handeln

Nicht jedes " " ist auch ein Leerzeichen … Tabulatoren können da auch oft böse mitmischen …

Grüße,
Tomh