UTF-8: zeigt korrekt in der Datenbank, jedoch nicht in HTML trotz utf-8 Zeichensatz

8

Ich benutze MySQL 5.1 und lade aus einer UTF-8 dekodierten txt-Datei ca. 2.7 Mil Zeilen in eine Tabelle, die selbst als utf8_unicode_ci deklariert ist und auch alle char-Felder als utf8_unicode_ci deklariert werden, mit LOAD DATA INFILE ...

In der Datenbank selbst scheinen die Charaktere korrekt zu sein, alles sieht gut aus. Wenn ich sie jedoch mit PHP drucke, erscheinen die Zeichen als ???, obwohl ich die utf-8-Deklaration im HTML-Kopf verwende:

%Vor%

In einer anderen Tabelle (mit utf-8), wo ich Text von einem übermittelten Formular eingefügt habe, erscheinen die Zeichen merkwürdig in der Datenbank, werden aber wieder korrekt angezeigt, wenn ich sie mit SELECT... drucke.

Also, ich habe mich gefragt: was ist los? Sind UTF-8 chars korrekt in der Datenbank oder seltsam dargestellt, aber wenn Sie sie wieder SELECT haben, sind sie OK? Oder wo ist das Problem (beim Laden der Datei in die db, im HTML oder irgendwo dazwischen) ??

Vielen Dank für einen Hinweis oder Vorschlag! :)

    
Chris 28.04.2012, 20:10
quelle

2 Antworten

11

Hinweis: MySQL utf8 Zeichensatz ist begrenzt, es unterstützt nur Unicode-Zeichen in der BMP, die nicht mehr als drei Bytes belegen. Sie sollten stattdessen utf8mb4 verwenden.

  • Stellen Sie sicher, dass Sie nach dem Verbinden den Befehl SET NAMES utf8 SET NAMES utf8mb4 an MySQL senden, bevor Sie MySQL-Abfragen ausführen.
  • Stellen Sie sicher, dass Ihre Seite tatsächlich als utf-8 gerendert wird (wenn ein HTTP-Header vorhanden ist Content-Type: text/html;charset=iso-8859-1 , Browser sind sich nicht einig, welche sollten gewinnen).
  • Lesen Sie diesen Artikel: Umgang mit Unicode in einer Web-App (aber denken Sie daran, utf8 durch utf8mb4 where zu ersetzen MySQL ist betroffen).

Wenn phpMyAdmin Ihre eingegebenen Daten als korrekten Unicode-Text anzeigt, dann wette ich, dass Sie nach dem Verbinden nicht SET NAMES utf8 ausführen.

    
DCoder 15.05.2012, 15:32
quelle
6

Verwenden Sie diesen Code nach dem Herstellen einer Verbindung mit DataBase, aber bevor Sie Daten empfangen

%Vor%     
DaneSoul 02.05.2012 23:02
quelle