Auf diese Frage gibt es 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 sind Abgeschnitten beim Einfügen ). Ich halte dies für einen wichtigen Unterschied. Hier ist also eine weitere Antwort auf die Frage, wie man den Standardzeichensatz und die Sortierung einstellt. Eine, die es Ihnen erlaubt, einen Haufen Kacke () einzufügen.
Dies funktioniert mit MySQL 5.5.35.
Beachten Sie, dass einige der Einstellungen optional sein können. Da ich nicht ganz sicher bin, dass ich nichts 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)
Konfigurieren Sie
#
# 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)
zeichensatz_system ist immer utf8 .
Dies hat keine Auswirkungen auf bestehende Tabellen, es ist lediglich die Standardeinstellung (für neue Tabellen). Das Folgende ALTER-Code kann verwendet werden, um eine bestehende Tabelle zu konvertieren (ohne die Umgehung von dump-restore):
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: character_set_client, character_set_connection, character_set_results, collation_connection bleiben auf latin1. Ausgabe von SET NAMES utf8
(utf8mb4 ist in dieser Version nicht verfügbar) setzt diese ebenfalls auf utf8.
Caveat : Wenn Sie eine utf8-Tabelle mit einer Indexspalte vom Typ VARCHAR(255) haben, kann diese in manchen Fällen nicht konvertiert werden, weil 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 (denn 191 * 4 = 764 < 767 < 192 * 4 = 768). Danach kann die Tabelle umgerechnet werden.