RR mobil: mysql spalte einmal von utf8 nach iso8859 zurückcodieren

Hallo Forum,

wie kann ich in einer mysql-Tabelle einträge in in einer Spalte finden, die versehntlich vor dem Eintragen doppelt utf8-codiert wurden und wie kann ich die dann zurückkodieren nach iso8859-1 (Latin-1).

Ich möchte das direkt mit der Datenbank machen, wenn es geht.

Grüße Robert (von unterwegs).

  1. Tach!

    wie kann ich in einer mysql-Tabelle einträge in in einer Spalte finden, die versehntlich vor dem Eintragen doppelt utf8-codiert wurden

    Erster Gedanke: schwer bis unmöglich. Der Mensch kann es am Sinn erkennen, ob da was falsches im Wort steht. Der Computer kann das nicht. Der braucht eine Regel, anhand derer er das erkennen kann. Wie müsste eine solche Regel aussehen, die keine falschen Treffer findet - und das inmitten von korrekten Einträgen? Doppelt kodierte Zeichen zeichnen sich dadurch aus, dass (unter der Annahme, dass du nur Zeichen in den Daten hast, die in UTF-8 mit 2 Byte kodiert werden) 4 Bytes größer als 0x7F aufeinanderfolgen. Aber das schaffen auch normale Wörter, die regulär zwei Nicht-ASCII-Zeichen aufeinanderfolgen haben, wie beispielsweise "Größe".

    Da fällt mir eine Idee ein. Man könnte einmal von UTF-8 nach ISO-8859-1 umkodieren und dann schauen, ob immer noch gültige UTF-8-Sequenzen im Resultat enthalten sind. Die muss man dann noch ein weiteres Mal dekodieren.

    Ich möchte das direkt mit der Datenbank machen, wenn es geht.

    Geht sicherlich, ist aber nicht nur eine einzelne Query. Der Aufwand dafür ein (PHP-)Script zu schreiben oder eine Stored Procedure kommt vermutlich auf dasselbe hinaus. Falls MySQL überhapt brauchbare Funktionen für Byteauswertungen von Zeichen in String hat.

    dedlfix.

    1. Hallo,

      Erster Gedanke: schwer bis unmöglich.

      Den Eindruck habe ich auch gewonnen. Mysql har nur diese dämliche convert()-Funktion. Mit der habe ich mir einen abgebrochen.

      Schlussendlich habe ich mir eine Benutzerfunktion geschrieben, die mittels replace() Stringersetzungen der paar Zeichen durchführt, die das i.d.R. betrifft. Hat soweit geklappt. 7.600 Datensätze "repariert".

      Grüße Robert