2016-05-25 4 views
0

Leider sind alle meine Datenbanken (und Collations) utf8_general_ci und ich habe gerade erst gelernt, es ist besser utf8_unicode_ci zu verwenden, da es mehr Unicode-Zeichen genau unterstützt.Konvertieren von MySQL Charset in Datenbank (auch Mysqli Charset Related)

Wird es irgendwelche Probleme geben, wenn ich phpMyAdmin verwende, um die Collations und Datenbank-Tabellen-Charsets über ihre Menüs zu ändern?

Da ich auch nicht die Wichtigkeit von Zeichensätzen kannte, habe ich meine MySQLi-Zeichensätze für meine Datenbankverbindung in PHP nicht eingestellt. Sollte ich für alle meine Verbindungen gehen und mysqli->set_charset("utf8") tun? Zurzeit ist es standardmäßig auf "latin1" eingestellt. Ich nehme an, dies könnte ein Problem sein, da ich als UTF8 speichern, aber latin1 akzeptiere? (Ich bin aber UTF8 auf meine HTML-Seiten mit

meta charset="utf-8" 

erklärte ich auch gelesen, könnte es besser sein gerade zu gehen utf8mb4? Auch hier würde ich irgendwelche Probleme haben zu ändern, dass mit phpMyAdmin und ist es das wert? Wenn ich gehen Sie utf8mb4 ich mysqli->set_charset('utf8mb4')?

Dank zu tun haben, ich sollte wirklich dies getan zu starten.

Antwort

0

CHARACTER SET ist die Codierung der Bytes. COLLATION ist, wie die Zeichen verglichen werden (für WHERE und ORDER BY).

Sie können nicht trivial eine von denen ändern, nachdem die Tabelle erstellt wurde. Stattdessen müssen Sie eine Form von ALTER, wahrscheinlich ALTER ... CONVERT TO ... tun.

Der Zeichensatzutf8mb4 den Vorteil, alle Chinesen hat Handling (utf8 einige Zeichen fehlt) und Emoji (die neueren Smileys).

Die Sortierungsutf8_unicode_520_ci (oder utf8mb4_unicode_520_ci für Zeichensatz utf8mb4) auf einem neueren Unicode-Standard basiert, so dass es wohl die 'beste' in MySQL.

Also, ja,

  1. ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;
  2. mysqli->set_charset('utf8mb4'); direkt nach dem Anschluss.
  3. In HTML haben <meta charset=UTF-8>

Es gibt eine Chance, dass die CONVERT TO kommen über "doppelten Schlüssel", da die _unicode_ Sortierungen arbeiten anders als * _general_ci. Das wird für Englisch nicht passieren, und wird für den größten Teil Europas nicht passieren. Zwei Ausnahmen kommen in Frage: die deutsche ß in irgendeiner UNIQUE oder PRIMARY Spalte, und alle akzentuierten Buchstaben, die aus einem "Nicht-Abstand" Akzent zusammen mit einem Buchstaben zusammengesetzt sind. (Letzteres ist sehr selten.)