2016-04-18 5 views
2

Ich habe ein seltsames Problem, dass ich Felder finden können, die die korrupten Zeichen ich suche, aber REPLACE mit null Elemente beeinflussen:MYSQL: kann finden, aber nicht ersetzen korrupte Zeichen

Die Abfrage unten (hat beschädigte Zeichen nach dem%, das nur in Firefox-Textfeldern gesehen werden kann, nicht Chrome oder Safari) WORKS und wird mehr als tausend Datensätze zurückgeben.

ABER die folgende Aktualisierungsabfrage betrifft ZERO-Elemente, obwohl sie genau den gleichen Wert haben.

UPDATE resource_data 
SET value = REPLACE(value,'%','') 
WHERE value like '%'; 

Irgendwelche Ideen?

FYI hier ist, was die Figuren wie in Firefox aussehen: notice the corrupt characters? That is what I am cutting and pasting into my query after the %

+0

Sie wissen, dass '%' ist der Wildcard-Operator von 'like'? –

+1

natürlich. Wie ich oben erwähnt habe, können Sie die korrupten Zeichen NACH dem% nicht sehen, aber sie sind da. – Stephen

+0

Beachten Sie, wenn ich falsch liege, aber Wert wie '%'; Passen Sie jede Zeichenfolge, auch leere –

Antwort

0

Wenn es hex 1D in latin1 ist, ...

sehen, ob dies der holt Zeilen, korrigiert:

SELECT REPLACE(value, UNHEX('1D'), '') 
    FROM resource_data 
    WHERE value LIKE CONCAT('%', UNHEX('1D'), '%'); 

Wenn es die Zeile (n) zeigt , dann in Betracht ziehen

UPDATE resource_data 
    SET value = REPLACE(value, UNHEX('1D'), ''); 
+0

Die SELECT-Anweisung funktionierte, aber die Update-Anweisung scheiterte mit "Falsche Parameteranzahl im Aufruf der nativen Funktion 'UNHEX'" – Stephen

+0

OH WAIT ... Ich habe Ihren Code einfach ausgeschnitten und eingefügt und festgestellt, dass in Ihrem Update ein Fehler aufgetreten ist Anweisung ... sollte lauten: 'UPDATE resource_data SET Wert = ERSETZEN (Wert, UNHEX ('1D'), '');' Sobald ich das behoben habe, hat es funktioniert! – Stephen

+0

Nun, meine Parens ausgeglichen. Hehe. Ich habe es bearbeitet. –

0

versuchen, diese

UPDATE resource_data 
SET value = REPLACE(value,'%','') 
WHERE INSTR(value, '%') > 0 
+0

Danke, aber auch 0 Zeilen betroffen. Das Problem ist nicht wirklich in der WHERE-Klausel, weil es sogar auf die gleiche Weise fehlschlägt, es komplett auszulassen. – Stephen