370 Stimmen

Den Standardzeichensatz von MySQL in der Datei my.cnf auf UTF-8 ändern?

Derzeit verwenden wir die folgenden Befehle in PHP, um den Zeichensatz zu setzen UTF-8 in unserer Anwendung.

Da dies ein wenig Overhead bedeutet, würden wir dies gerne als Standardeinstellung in MySQL festlegen. Können wir dies in /etc/my.cnf oder an einem anderen Ort tun?

SET NAMES 'utf8'
SET CHARACTER SET utf8

Ich habe in /etc/my.cnf nach einem Standardzeichensatz gesucht, aber dort steht nichts über Zeichensätze.

Zu diesem Zeitpunkt habe ich die Variablen für den MySQL-Zeichensatz und die Sortierung wie folgt auf UTF-8 gesetzt:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

Ist das der richtige Weg, dies zu tun?

28voto

mug896 Punkte 1485

MySQL v5.5.3 und höher:

Fügen Sie einfach nur drei Zeilen in den [mysqld]-Abschnitt ein:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

Nota: Einschließlich skip-character-set-client-handshake hier entfällt die Notwendigkeit, sowohl init-connect en [mysqld] y default-character-set im [client] y [mysql] Abschnitte.

24voto

Derek Punkte 1331

NijaCat war nahe dran, wurde aber als übertrieben bezeichnet:

Um die Standardeinstellung auf UTF-8 zu setzen, müssen Sie Folgendes zu my.cnf hinzufügen

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Dann, um zu überprüfen:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

23voto

amiroff Punkte 219

Ich habe auch herausgefunden, dass nach der Einstellung default-character-set = utf8 unter [mysqld] Titel, MySQL 5.5.x würde nicht starten unter Ubuntu 12.04 (Präzises Schuppentier).

11voto

Sergei Danielian Punkte 4721

Alle hier aufgeführten Einstellungen sind richtig, aber hier sind die optimalsten und ausreichendsten Lösungen:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

Fügen Sie diese zu /etc/mysql/my.cnf .

Bitte beachten Sie, dass ich mich für utf8_unicode_ci Art der Sortierung aufgrund des Leistungsproblems.

Das Ergebnis ist:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Und das ist der Moment, in dem Sie sich als Nicht-SUPER-Benutzer !

Zum Beispiel ist der Unterschied zwischen einer Verbindung als SUPER- und Nicht-SUPER-Benutzer (natürlich im Falle von utf8_unicode_ci Kollation):

Benutzer mit SUPER priv.:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Benutzer mit nicht-SUPER priv.:

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Ich schrieb eine umfassender Artikel (rus), in der Sie ausführlich erklären, warum Sie die eine oder die andere Option wählen sollten. Alle Arten von Zeichensätze y Zusammenstellungen werden berücksichtigt: für den Server, für die Datenbank, für die Verbindung, für die Tabelle und sogar für die Spalte.

Ich hoffe, dass dies und der Artikel zur Klärung unklarer Momente beitragen werden.

9voto

Falko Punkte 91

Unter Xubuntu 12.04 habe ich einfach

[mysqld]
character_set_server = utf8

zu /etc/mysql/my.cnf

Und das Ergebnis ist

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| 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   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

Werfen Sie auch einen Blick auf http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X