Umwandlung von latin1_swedish_ci in utf8 mit PHP

8

Ich habe eine Datenbank gefüllt mit Werten wie ♥•â—♥ Dhaka ♥•â—♥ (was ♥•●♥ Dhaka ♥•●♥ sein sollte), da ich die Kollatierung beim Erstellen der Datenbank nicht angegeben habe.
Jetzt möchte ich es beheben. Ich kann die Daten nicht mehr von der Stelle abrufen, von der ich sie bekommen habe. Also habe ich überlegt, ob es möglich sein könnte, die Daten in einem PHP-Skript abzurufen und in die richtigen Zeichen zu konvertieren.
Ich habe die Sortierung der Datenbank und der Felder in utf8_general_ci .. geändert.

    
Bibhas Debnath 11.07.2011, 07:23
quelle

2 Antworten

14

Die Sortierung entspricht NICHT dem Zeichensatz. Die Sortierung wird nur zum Sortieren und Vergleichen von Text verwendet (deshalb gibt es dort einen Sprachbegriff). Der tatsächliche Zeichensatz kann unterschiedlich sein.

Der häufigste Fehler liegt nicht in der Datenbank, sondern in der Verbindung zwischen PHP und MySQL. Der Standardzeichensatz für die Verbindung ist normalerweise ISO-8859-1. Das müssen Sie als Erstes nach der Verbindung ändern, indem Sie entweder die SQL-Abfrage SET NAMES 'utf-8'; oder die Funktion mysql_set_charset verwenden.

Überprüfen Sie auch den Zeichensatz Ihrer Tabellen. Dies kann auch falsch sein, wenn Sie nicht mit UTF-8 begonnen haben (wieder: das ist nicht dasselbe wie die Sortierung). Aber stellen Sie sicher, dass Sie eine Sicherungskopie erstellen, bevor Sie hier etwas ändern. MySQL wird versuchen, den Zeichensatz aus dem vorherigen zu konvertieren. Daher müssen Sie möglicherweise die Daten aus der Sicherung neu laden, wenn Sie tatsächlich UTF-8-Daten in ISO-8859-1-Tabellen gespeichert haben.

    
Emil Vikström 11.07.2011, 07:28
quelle
2

Ich würde nachsehen mb_detect_encoding () und mb_convert_encoding () und sehen, ob sie Ihnen helfen können.

    
AlienWebguy 11.07.2011 07:29
quelle

Tags und Links