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

Griechische Zeichen können nicht richtig in die MySQL-Datenbank eingefügt werden

Ihr Problem hängt mit Ihrer Zeichensatzcodierung zusammen. Es ist wichtig, dass Ihre gesamte Code hat denselben Zeichensatz, um Probleme zu vermeiden, bei denen Zeichen falsch angezeigt werden.

Es gibt einige Einstellungen, die richtig definiert werden müssen, und ich würde dringend UTF-8 empfehlen, da dies die meisten Buchstaben enthält, die Sie benötigen würden (skandinavisch, griechisch, arabisch, russisch usw.).

Hier ist eine kleine Liste von Dingen, die auf einen bestimmten Zeichensatz eingestellt werden müssen.

Überschriften

  • Einstellen des Zeichensatzes in HTML- und PHP-Headern auf UTF-8

    • PHP:

      header('Content-Type: text/html; charset=utf-8');
      

      (PHP-Header müssen vor any platziert werden Ausgabe (Echo, Whitespace, HTML)!)

    • HTML:

      <meta charset=utf-8" />
      

      (HTML-Header werden innerhalb des <head> platziert / </head> -Tag)

Verbindung

  • Sie müssen auch den Zeichensatz in der Verbindung selbst angeben . Für Ihr PDO-Beispiel wird es so gemacht

    $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
    

    Beachten Sie den charset=utf8 -Attribut. Andere MySQL-APIs haben andere Möglichkeiten, dies zu tun, falls Sie in Zukunft etwas anderes verwenden sollten.

Datenbank

  • Ihre Datenbank und seine Tabellen müssen auf UTF-8 gesetzt werden. Beachten Sie, dass charset nicht ist das gleiche wie Kollation. Wie ich sehe, haben Sie Ihre Sortierung bereits auf UTF-8 eingestellt, das ist gut, aber machen Sie dasselbe für die gesamte Datenbank und alle Tabellen.

    Sie können dies tun, indem Sie die folgenden Abfragen einmal für jede Datenbank und jede Tabelle ausführen (z. B. in phpMyAdmin)

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    Beachten Sie, dass bei bereits in der Datenbank gespeicherten Daten der fehlerhafte Zeichensatz nicht automatisch behoben wird. Daher ist es wichtig, dass Sie dies tun, bevor Sie Daten einfügen, oder dass Sie sie nach dem Festlegen des Zeichensatzes erneut einfügen.

php.ini-Spezifikation

  • In Ihrer php.ini -Datei sollten Sie den Standardzeichensatz für Ihre Plattform angeben, wie hier

    default_charset = "utf-8";
    

Dateikodierung

  • Wichtig ist auch, dass die .php Datei selbst ist UTF-8 kodiert. Wenn Sie Notepad++ verwenden, um Ihren Code zu schreiben, können Sie dies im Dropdown-Menü „Format“ in der Taskleiste tun.

Emojis

  • In MySQL (sowohl in der Tabelle als auch in der Datenbank und im Verbindungsobjekt) müssen Sie den utf8mb4 angeben Zeichensatz, im Gegensatz zum normalen utf8 , wenn Sie mit Emojis arbeiten möchten.

Ich weiß nicht viel über Java, aber wenn Sie dort auch Attribute auf UTF-8 setzen können, tun Sie es. Im Wesentlichen sollte alles, was auf einen bestimmten Zeichensatz eingestellt werden kann, auf denselben eingestellt werden.

Wenn Sie alle oben genannten Hinweise befolgen, besteht die Möglichkeit, dass Ihr Problem gelöst wird. Wenn nicht, können Sie sich diesen StackOverflow-Beitrag ansehen: UTF-8 durchgängig .