Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie werden UTF-8-Zeichen in phpMyAdmin angezeigt?

Leider ist phpMyAdmin eine der ersten PHP-Anwendungen, die richtig mit MySQL über Zeichensätze sprechen. Ihr Problem liegt höchstwahrscheinlich daran, dass die Datenbank nicht die richtigen UTF-8-Zeichenfolgen an erster Stelle speichert.

Damit die Zeichen korrekt in phpMyAdmin korrekt angezeigt werden, müssen die Daten korrekt in der Datenbank hinterlegt sein. Das Konvertieren der Datenbank in den korrekten Zeichensatz unterbricht jedoch häufig Web-Apps, die die von MySQL bereitgestellten Zeichensatz-bezogenen Funktionen nicht kennen.

Darf ich fragen:Ist MySQL> Version 4.1? Für welche Web-App ist die Datenbank? phpBB? Wurde die Datenbank von einer älteren Version der Webanwendung oder einer älteren Version von MySQL migriert?

Mein Vorschlag ist, Bruder nicht zu verwenden, wenn die von Ihnen verwendete Web-App zu alt ist und nicht unterstützt wird. Konvertieren Sie die Datenbank nur in echtes UTF-8, wenn Sie sicher sind, dass die Webanwendung sie korrekt lesen kann.

Bearbeiten:

Ihr MySQL ist> 4.1, das heißt, es ist zeichensatzbewusst. Was sind die Zeichensatzsortierungseinstellungen für Ihre Datenbank? Ich bin mir ziemlich sicher, dass Sie latin1 verwenden , was der MySQL-Name für ASCII ist, um den UTF-8-Text in 'Bytes' in der Datenbank zu speichern.

Bei zeichensatzunabhängigen Clients (z. B. mysql-cli und php-mod-mysql) werden Zeichen korrekt angezeigt, da sie als Bytes zur/von der Datenbank übertragen werden. In phpMyAdmin werden Bytes gelesen und als ASCII-Zeichen angezeigt, das ist der Mülltext, den Sie zu sehen scheinen.

Unzählige Stunden wurden vor Jahren (2005?) damit verbracht, als MySQL 4.0 in vielen Teilen Asiens obsolet wurde. Es gibt einen Standardweg, um mit Ihrem Problem und verschlungenen Daten umzugehen:

  1. Sichern Sie Ihre Datenbank als .sql
  2. Öffnen Sie es in einem UTF-8-fähigen Texteditor und vergewissern Sie sich, dass es korrekt aussieht.
  3. Suchen Sie nach charset collation latin1_general_ci , ersetzen Sie latin1 zu utf8 .
  4. Als neue SQL-Datei speichern, Backup nicht überschreiben
  5. Importieren Sie die neue Datei, sie wird jetzt in phpMyAdmin korrekt aussehen und Japanisch in Ihrer Web-App wird zu Fragezeichen. Das ist normal.
  6. Fügen Sie für Ihre PHP-Webanwendung, die auf php-mod-mysql angewiesen ist, mysql_query("SET NAMES UTF8"); ein nach mysql_connect() , jetzt sind die Fragezeichen weg.
  7. Fügen Sie die folgende Konfiguration hinzu my.ini für mysql-cli:

    # CLIENT SECTION
    [mysql]
    default-character-set=utf8
    # SERVER SECTION
    [mysqld]
    default-character-set=utf8
    

Weitere Informationen zum Zeichensatz in MySQL finden Sie im Handbuch: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Beachten Sie, dass ich annehme, dass Ihre Webanwendung php-mod-mysql verwendet, um sich mit der Datenbank zu verbinden (daher der mysql_connect() Funktion), da php-mod-mysql die einzige mir einfallende Erweiterung ist, die das Problem BIS HEUTE immer noch auslöst.

phpMyAdmin verwendet php-mod-mysqli, um sich mit MySQL zu verbinden. Ich habe nie gelernt, wie man es benutzt, weil ich zu Frameworks* gewechselt bin, um meine PHP-Projekte zu entwickeln. Ich empfehle Ihnen dringend, das auch zu tun.

  • Viele Frameworks, z.B. CodeIgniter, Zend, verwenden Sie mysqli oder pdo, um eine Verbindung zu Datenbanken herzustellen. mod-mysql-Funktionen gelten als veraltet, da sie Leistungs- und Skalierbarkeitsprobleme verursachen. Außerdem möchten Sie Ihr Projekt nicht an einen bestimmten Datenbanktyp binden.