Ich habe eine Abfrage für alle Sonderzeichen entfernen.
Aber ein Leerzeichen widersteht dieser Abfrage am Ende der E-Mail-Zeichenfolge.Entfernen von schadfreien Räumen?
Beispiel: '[email protected] '
UPDATE my_table SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),\'\x0B\',\'\'),\'\0\',\'\'),\'\t\',\'\'),\'\r\',\'\'),\'\n\',\'\'),\'\r\n\',\'\'),\'\n\r\',\'\'),\' \',\'\'),CHAR(160),\'\') WHERE id=X
Warum?
Ich benutze diese Aussage, weil ich eine WHERE id IN()
habe, also möchte ich keine Sonderzeichen in PHP verarbeiten. Ich möchte UPDATE
jede E-Mails direkt mit SET
und replace
, trim()
Funktion.
Allerdings sind einige Leerzeichen nicht gelöscht und ich weiß nicht warum.
Meine Tabelle hat etwa 12 Millionen Zeilen. Ich habe einen CRON programmiert, der sie holt, um alle Sonderzeichen zu löschen (leider, weil wir sie in der Vergangenheit nicht auf INSERT
überprüft hatten).
Also habe ich diese Abfrage erstellen, um meine 12 MM Zeilen zu verarbeiten. Es funktioniert sehr gut, außer dem richtigen Leerzeichen (manchmal wird es manchmal nicht entfernt). Und ich möchte hinzufügen, dass auf Workbench die Abfrage die ganze Zeit zu 100% funktioniert. Es ergibt keinen Sinn.
Hier ist meine Abfrage erneut ohne Backslash und mit meinem where IN
:
UPDATE NEWSLETTER_SUBSCRIPTION SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),'\x0B',''),'\0',''),'\t',''),'\r',''),'\n',''),'\r\n',''),'\n\r',''),' ',''),CHAR(160),'') WHERE id IN (' . implode(',', $idEmailToBeProcess) . ')
$idEmailToBeProcess
rund 500 ids enthält.
Ich denke, die richtige Leerzeichen, es ist ein nicht-brechender Raum, aber mein letzter Test mit CHAR(160)
in meiner Abfrage hat nicht funktioniert.
Warum nicht einfach eine Funktion verwenden, die speziell für diese Aufgabe in der Sprache erstellt wurde, in der Sie die Abfrage erstellen? IE. In PHP gibt es [trimmen] (http://www.php.net/manual/en/function.trim.php). – tenub
Was ist Ihre Muttersprache? PHP? Ich bin mir nicht sicher, warum Sie sich die Mühe machen sollten, diese hässliche verschachtelte SQL-Anweisung zu erstellen, wenn Sie etwas wie 'preg_replace' in PHP verwenden könnten, um es auf einmal zu tun. – brandonscript
@tenub Es gibt drei Trims in der Mitte des Ersatznestes. – Jerry