So konfigurieren Sie den globalen Zeichensatz unter MySQL

12

Ich habe versucht, den Zeichensatz für MySQL über my.cnf zu ändern, aber es ist fehlgeschlagen. Ich habe die unten aufgelisteten Zeichensatz-Einstellungen hinzugefügt:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

Als ich diese aktiviert hatte, konnte MySQL nicht gestartet werden. Wie kann ich sicherstellen, dass standardmäßig immer utf8 verwendet wird?

Aktualisieren

Es gibt immer noch einige Stellen, an denen Probleme mit UTF8 auftreten

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/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Leider habe ich noch keine Lösung gefunden ... irgendwelche Ideen?

Momentan verwende ich diese Konfiguration erfolgreich:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

Aber PHPMyAdmin zeigt immer noch Latin1

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/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci
Webnet
quelle

Antworten:

23

Sie müssen Folgendes in Ihre my.cnf-Datei integrieren

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Weitere Informationen finden Sie auf den folgenden Manualseiten

Wenn Sie als Antwort auf Marks Antwort vorhandene Tabellen / Datenbanken in den richtigen Zeichensatz konvertieren müssen, benötigen Sie eine geeignete ALTERAbfrage. Ähnliches wie das Folgende:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Alternativ gibt es hier ein tolles PHP-Skript , das das für Sie erledigt.

Ben Swinburne
quelle
Ich habe Ihre Anweisungen befolgt und die Links zur Dokumentation überprüft ... habe noch ein paar Probleme (siehe ^)
Wann immer ich collation-server = utf8_general_cizu dem mysqldAbschnitt hinzufügen , kann
Können Sie sehen, was in der Protokolldatei enthalten ist? Sie sollten eine Fehlermeldung erhalten, warum dies fehlgeschlagen ist. Ich nehme an, Ihre mysqld wurde mit dem allgemeinen Zeichensatz utf8 kompiliert, der enthalten ist?
Ja ich denke es war ... welche Logdatei?
1
Funktioniert für mich (Debian 8, MySQL 5.5), außer für die default-character-set = utf8Zeile unter [mysqld]Abschnitt. Wenn Sie genau diese Zeile hinzufügen, dauert der Neustart von mysqld ewig. Die Unicode-Unterstützung funktioniert jedoch auch ohne diese Zeile hervorragend.
Bass
2

Bens Antwort ist in Ordnung, aber durch Ändern der Einstellungen werden vorhandene Tabellenzeichensätze oder -sortierungen UNBEDINGT NICHT geändert. Tun Sie dies mit einer geeigneten ALTER TABLE-Anweisung.

Beachten Sie, dass, wenn Sie dies nicht angeben, Tabellen im Standardzeichensatz der Datenbank erstellt werden. Dies ist eine Einstellung pro Datenbank, die mit ALTER DATABASE angepasst werden kann. Dies ist auch nicht in my.cnf eingestellt.


quelle
1
Neue Datenbanken erben jedoch die Standardeinstellungen von MySQL, oder?