Как настроить глобальную кодировку на MySQL

12

Я попытался изменить кодировку для нашего MySQL через my.cnf, и это не удалось. Я добавил настройки кодировки, указанные ниже:

# 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

Когда я включил их, MySQL не запустился. Как я могу убедиться, что все по умолчанию utf8 - всегда?

Обновить

Есть еще несколько мест, где есть проблемы с 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

К сожалению, я до сих пор не нашел солютон ... есть идеи?

В настоящее время я успешно использую эту конфигурацию:

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


[mysql]
default-character-set = utf8

Но PHPMyAdmin все еще показывает некоторые латыни

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
источник

Ответы:

23

Вы должны включить следующее в ваш файл 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

Вы можете найти больше информации на следующих страницах руководства

В ответ на ответ Марка, если вам нужно преобразовать существующие таблицы / базы данных в правильный набор символов, вам потребуется подходящий ALTERзапрос. Нечто похожее на ниже:

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

Кроме того, есть отличный PHP скрипт здесь , который делает это для вас.

Бен Суинберн
источник
Я следовал вашим инструкциям и проверил ссылки на документацию ... все еще есть некоторые проблемы (см. ^)
Всякий раз, когда я добавляю collation-server = utf8_general_ciв mysqldраздел mysql не удается перезапустить
Вы можете посмотреть, что находится в файле журнала? Это должно дать вам сообщение об ошибке, почему это не удалось. Я так понимаю, ваш mysqld был скомпилирован с включенным общим набором символов utf8?
Да, я думаю, что это был ... какой файл журнала?
1
У меня работает (Debian 8, MySQL 5.5), кроме default-character-set = utf8строки в [mysqld]разделе. Добавление этой самой строки приводит к тому, что mysqld перезапускается навсегда. Однако поддержка Unicode прекрасно работает даже без этой строки.
Бас
2

Ответ Бена в порядке, но изменение настроек АБСОЛЮТНО НЕ изменит наборы символов или сопоставления существующих таблиц. Сделайте это с помощью соответствующего оператора ALTER TABLE.

Обратите внимание, что если вы не укажете это, таблицы будут созданы в наборе символов по умолчанию базы данных. Это настройка для каждой базы данных, которую можно настроить с помощью ALTER DATABASE. Это также не установлено в my.cnf.


источник
1
Новые базы данных будут наследовать настройки mysql по умолчанию, правда?