Изменить набор символов MySQL по умолчанию на UTF-8 в my.cnf? - PullRequest
323 голосов
/ 18 августа 2010

В настоящее время мы используем следующие команды в PHP для установки набора символов на UTF-8 в нашем приложении.

Так как это немного накладные расходы, мы хотели бы установить это как настройку по умолчанию в MySQL.Можем ли мы сделать это в /etc/my.cnf или в другом месте?

SET NAMES 'utf8'
SET CHARACTER SET utf8

Я искал набор символов по умолчанию в /etc/my.cnf, но там нет ничего о наборах символов.

В этот момент я сделал следующее, чтобы установить переменные набора символов и параметров сортировки MySQL в UTF-8:

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

Это правильный способ справиться с этим?

Ответы [ 18 ]

5 голосов
/ 19 сентября 2011

Директива была изменена на character-set-system=utf8

http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html

4 голосов
/ 05 мая 2015

На Fedora 21

$ vi /etc/my.cnf

Добавить следующее:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Сохранить и выйти.

Окончательно запомните, перезапустите службу mysqld с service mysqld restart.

4 голосов
/ 06 ноября 2013

Версии MySQL и дистрибутивы Linux могут иметь значение при создании конфигураций.

Однако, изменения в разделе [mysqld] приветствуются.

Я хочу дать краткое объяснение ответа tomazzlender:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

[mysqld]

Это изменит collation_connection на utf8_unicode_ci

init_connect='SET collation_connection = utf8_unicode_ci'

Использование SET NAMES:

init_connect='SET NAMES utf8'

SET NAMES будетвлияют на три символа, то есть:

character_set_client
character_set_results
character_set_connection

Это установит character_set_database & character_set_server

character-set-server=utf8

Это повлияет только на collation_database & collation_server

collation-server=utf8_unicode_ci

Извините, яЯ не уверен, для чего это нужно.Я не использую это однако:

skip-character-set-client-handshake
1 голос
/ 16 мая 2014

Если у вас возникли проблемы с подтверждением поддержки набора символов клиента с помощью MySQL Workbench, помните следующее:

Внимание Все соединения, открытые MySQL Workbench, автоматически устанавливаютклиентский набор символов utf8.Ручное изменение набора символов клиента, например использование SET NAMES ..., может привести к тому, что MySQL Workbench будет некорректно отображать символы.Для получения дополнительной информации о клиентских наборах символов см. Соединительные наборы символов и сопоставления.

Таким образом, я не смог переопределить наборы символов MySQL Workbench с изменениями my.cnf.например, 'set names utf8mb4'

1 голос
/ 26 мая 2015

Если вас смущают ваши настройки для клиента, и conn сбрасывается после перезапуска службы mysql. Попробуйте эти шаги (которые работали для меня):

  1. vi /etc/my.cnf
  2. добавить содержимое удара и :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. перезапустите mysql и войдите в систему mysql, используйте базу данных, введите команду status;, вы найдете набор символов для 'client' и для 'conn' установлено значение 'utf8'.

Проверьте ссылку для получения дополнительной информации.

1 голос
/ 12 октября 2013

MySQL 5.5, все, что вам нужно:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server необязательно.

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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)
0 голосов
/ 06 августа 2017

Вы можете сделать это так, как оно работает, и если оно не работает, вам нужно перезапустить mysql.

0 голосов
/ 12 июля 2013

Изменить символ MySQL:

Клиент

default-character-set=utf8

mysqld

character_set_server=utf8

Мы не должны писать default-character-set=utf8 в mysqld, поскольку это может привести к ошибкенапример:

start: Задание не удалось запустить

Наконец:

 +--------------------------+----------------------------+
 | 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/ |
 +--------------------------+----------------------------+
...