Jak skonfigurować globalny zestaw znaków na MySQL

12

Próbowałem zmienić zestaw znaków dla naszego MySQL przez my.cnf i nie udało się. Dodałem ustawienia zestawu znaków wymienione poniżej:

# 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

Kiedy je włączyłem, MySQL nie uruchomił się. Jak mogę się upewnić, że wszystko domyślnie ma wartość utf8 - zawsze?

Aktualizacja

Nadal jest kilka miejsc mających problemy z byciem UTF8

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

Niestety wciąż nie wymyśliłem rozwiązania ... jakieś pomysły?

Obecnie używam tej konfiguracji z powodzeniem:

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


[mysql]
default-character-set = utf8

Ale PHPMyAdmin wciąż pokazuje 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
źródło

Odpowiedzi:

23

Musisz włączyć następujące elementy do pliku my.cnf

[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

Więcej informacji można znaleźć na poniższych stronach podręcznika

W odpowiedzi na odpowiedź Marka, jeśli chcesz przekonwertować istniejące tabele / bazy danych na właściwy zestaw znaków, potrzebujesz odpowiedniego ALTERzapytania. Coś podobnego do poniższego:

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

Alternatywnie jest tutaj świetny skrypt PHP , który robi to za Ciebie.

Ben Swinburne
źródło
Postępowałem zgodnie z instrukcjami i sprawdziłem łącza do dokumentacji ... wciąż mam kilka problemów (patrz ^)
Ilekroć dodam collation-server = utf8_general_cido mysqldsekcji mysql nie uruchamia się ponownie
Czy możesz sprawdzić, co jest w pliku dziennika? Powinien zostać wyświetlony komunikat o błędzie informujący o przyczynie niepowodzenia. Rozumiem, że twój mysqld został skompilowany z dołączonym ogólnym zestawem znaków utf8?
Tak, myślę, że to był ... który plik dziennika?
1
Działa dla mnie (Debian 8, MySQL 5.5), z wyjątkiem default-character-set = utf8wiersza w [mysqld]sekcji. Dodanie tej samej linii powoduje, że mysqld trwa wiecznie do ponownego uruchomienia. Jednak obsługa Unicode działa świetnie nawet bez tej linii.
Bass
2

Odpowiedź Bena jest w porządku, ale zmiana ustawień absolutnie NIE zmieni istniejących zestawów znaków ani zestawień. Zrób to za pomocą odpowiedniej instrukcji ALTER TABLE.

Pamiętaj, że jeśli go nie określisz, tabele są tworzone w domyślnym zestawie znaków bazy danych. Jest to ustawienie dla bazy danych, które można zmienić za pomocą ALTER DATABASE. Nie jest to również ustawione w my.cnf.


źródło
1
Nowe bazy danych odziedziczą jednak domyślne ustawienia mysql, prawda?