Diese Frage hat bereits viele Antworten, aber Mathias Bynens erwähnte, dass 'utf8mb4' anstelle von 'utf8' verwendet werden sollte, um eine bessere UTF-8-Unterstützung zu erhalten ('utf8' unterstützt keine 4-Byte-Zeichen, Felder werden beim Einfügen abgeschnitten ). Ich halte dies für einen wichtigen Unterschied. Hier ist eine weitere Antwort zum Festlegen des Standardzeichensatzes und der Sortierung. Eine, mit der Sie einen Haufen Kot (💩) einlegen können.
Dies funktioniert unter MySQL 5.5.35.
Beachten Sie, dass einige der Einstellungen optional sein können. Da ich nicht ganz sicher bin, ob ich etwas vergessen habe, werde ich diese Antwort zu einem Community-Wiki machen.
Alte Einstellungen
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
Konfig
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
Neue Einstellungen
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system ist immer utf8 .
Dies wirkt sich nicht auf vorhandene Tabellen aus, sondern ist nur die Standardeinstellung (wird für neue Tabellen verwendet). Der folgende ALTER-Code kann zum Konvertieren einer vorhandenen Tabelle verwendet werden (ohne die Problemumgehung für die Dump-Wiederherstellung):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Bearbeiten:
Auf einem MySQL 5.0-Server bleiben Character_set_client, Character_set_connection, Character_set_results und Collation_connection bei latin1. Durch Ausgabe SET NAMES utf8
(utf8mb4 in dieser Version nicht verfügbar) werden diese ebenfalls auf utf8 gesetzt.
Vorsichtsmaßnahme : Wenn Sie eine utf8-Tabelle mit einer Indexspalte vom Typ VARCHAR (255) hatten, kann diese in einigen Fällen nicht konvertiert werden, da die maximale Schlüssellänge überschritten wird ( Specified key was too long; max key length is 767 bytes.
). Reduzieren Sie nach Möglichkeit die Spaltengröße von 255 auf 191 (da 191 * 4 = 764 <767 <192 * 4 = 768). Danach kann die Tabelle konvertiert werden.
utf8mb4
, dh echtes UTF-8 mit vollständiger Unicode-Unterstützung. Siehe So unterstützen Sie vollständigen Unicode in MySQL-Datenbanken .