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

334

В настоящее время мы используем следующие команды в 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

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

Jorre
источник
19
Обратите внимание, что лучшим вариантом по умолчанию будет utf8mb4реальный UTF-8 с полной поддержкой Unicode. См. Как поддерживать полный Unicode в базах данных MySQL .
Матиас Биненс
@ Не могли бы вы возразить, чтобы это изменилось так, чтобы utf8mb4это создавало опасный прецедент?
Эван Кэрролл

Ответы:

424

Чтобы установить значение по умолчанию UTF-8, вы хотите добавить следующее в my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

Если вы хотите изменить набор символов для существующей БД, дайте мне знать ... ваш вопрос не указал это напрямую, поэтому я не уверен, что именно это вы и хотите сделать.

NinjaCat
источник
18
Вышеуказанные настройки my.cnf работали и для меня. Кроме того, мне нужно было убедиться, что таблица установлена ​​правильно, например, ALTER TABLE TableCONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Крис Ливдаль
8
Не работает для MySQL 5.5. Я использовал: <br/> [mysqld] # Изменения для utf-8 collation-server = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' набор символов-серверов = utf8mb4 и utf8mb4 в других местах, как упомянуто выше.
Champ
12
На Ubuntu 12.04 это работало для меня - если я убрал первую строку после [mysqld].
Брэндон Бертельсен
4
Похоже, набор символов по умолчанию больше не разрешен в разделе [mysqld]
Марсбард
4
Обратите внимание: если вам нужен UTF-8, не используйте utf8кодировку MySQL . Используйте utf8mb4вместо этого.
Матиас Биненс,
255

Для последней версии MySQL,

default-character-set = utf8

вызывает проблему. Это устарело, я думаю.

Как сказал Джастин Болл в « Обновлении до MySQL 5.5.12, и теперь MySQL не запускается , вы должны:

  1. Уберите эту директиву, и у вас все получится.

  2. Тогда ваш файл конфигурации (например, /etc/my.cnf) должен выглядеть так:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    
  3. Перезапустите MySQL.

  4. Чтобы убедиться, что ваш MySQL - UTF-8, выполните следующие запросы в командной строке MySQL:

    • Первый запрос:

       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/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
      
    • Второй запрос:

       mysql> show variables like 'collation%';

      И результат запроса:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+
      
Mustafah
источник
Ваша первая строка max_allowed_packet = 64M связана с этой проблемой UTF8 каким-либо образом?
Малхал
У меня есть character_set_filesystem | utf8. Я не уверен, это нормально?
дядя Лем
1
Пробовал на MariaDB v5.5 и все работает, спасибо! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
сент
Я думаю, вам не нужно удалять default-character-set, вместо этого вы можете поменять на loose-default-character-set = utf8- то есть на префикс «свободный». Это mysqlbinlogрадует, если вам нужно его использовать - google для: mysqlbinlog : "Свободный набор символов по умолчанию" .
КаджМагнус,
Это init-connect='SET NAMES utf8'действительно необходимо? Если нет, мы определенно можем обойтись без него для производительности.
datasn.io
56

На этот вопрос уже есть много ответов, но Матиас Биненс упомянул, что вместо utf8 следует использовать utf8mb4, чтобы иметь лучшую поддержку UTF-8 (utf8 не поддерживает 4-байтовые символы, поля усекаются при вставке ). Я считаю это важным отличием. Итак, вот еще один ответ о том, как установить набор символов по умолчанию и сопоставление. Тот, который позволит вам вставить кучу какашек (💩).

Это работает на MySQL 5.5.35.

Обратите внимание, что некоторые настройки могут быть необязательными. Поскольку я не совсем уверен, что ничего не забыл, я сделаю этот ответ в вики сообщества.

Старые настройки

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

конфиг

# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4

Новые настройки

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)

символьная_система всегда utf8 .

Это не повлияет на существующие таблицы, это просто настройка по умолчанию (используется для новых таблиц). Следующий код ALTER может использоваться для преобразования существующей таблицы (без обходного пути восстановления дампа):

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Редактировать:

На сервере MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection остаются в latin1. Выдача SET NAMES utf8(utf8mb4 не доступны в этой версии) устанавливает те в utf8 , а также.


Предупреждение : если у вас была таблица utf8 со столбцом индекса типа VARCHAR (255), в некоторых случаях ее нельзя преобразовать, поскольку превышена максимальная длина ключа ( Specified key was too long; max key length is 767 bytes.). Если возможно, уменьшите размер столбца с 255 до 191 (потому что 191 * 4 = 764 <767 <192 * 4 = 768). После этого таблицу можно преобразовать.

оборота основные6
источник
Я следил за вашими настройками, но нахожу character_set_databaseвсе еще utf8и collation_databaseесть utf8_bin`. Я что-то пропустил?
Стюарт
Нашел то, что я пропустил. Эти 2 параметра устанавливаются при создании самой базы данных. Смотрите этот вопрос; stackoverflow.com/questions/22572558/…
Стюарт
1
добавить character-set-client-handshake = FALSEв раздел [mysqld], чтобы он всегда использовал кодировку по умолчанию, даже если вы допустите ошибку на прикладном уровне
Lukas Liesis
привет, я пробовал это решение, но все еще не могу показать character_set_client | utf8mb4. это utf8. просто character_set_database utf8mb4 и character_set_server utf8mb4 являются другими неизменными. Пожалуйста, помогите мне
Бхавин Чаухан
@ baic6 Я предлагаю добавить примечание, объясняющее, почему только индексированные столбцы могут вызвать проблему. Ограничение в 767 байтов только для индексированных столбцов, так как ограничение для «ключей». В целом, для неиндексированных столбцов это не применяется. Если столбец имеет значение с максимальной длиной байта, скажем, 255 символов и максимум 3 байта utf8, ему все равно потребуется только 255 * 3 байта, utf8mb4 в этих случаях будет использовать только 3 байта, так как эти символы в utf8mb4 также нужно всего 3 байта. То есть, если символ, который не помещается в utf8, не был сохранен в столбце, в этом случае информация уже потеряна.
Сэм
55

На MySQL 5.5 у меня есть в my.cnf

[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

Результат

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_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
tomazzlender
источник
2
Что skip-character-set-client-handshakeименно и при каких обстоятельствах требуется?
Саймон Ист
3
@Simon, при использовании show variables like "%collation%";я видел 'collation_connection' как utf8_general_ciи collation_database и collation_server как utf8_unicode_ci. Добавление строки skip-character-set-client-handshakeизменило общую запись на юникод, поэтому все три были согласованы.
Вон
2
На MySQL 5.6, skip-character-set-client-handshake не делает то, что сказал @Vaughany. Любое предложение?
Ababneh A
4
Он skip-character-set-client-handshakeсделал это для меня (наряду с «набором символов» и «сервером сравнения», конечно же, в Debian 7). С init_connectне имеет значения с или без skipи кажутся излишними. +1 и спасибо.
Джефф
3
skip-character-set-client-handshake игнорирует информацию набора символов, отправленную клиентом. Это хорошо для форсирования определенного набора символов во время общения, но если клиент ожидает чего-то другого, это может привести к проблемам. Я бы сказал, что лучше указать это на клиенте (в вашем приложении).
0b10011
31

Примечание: файл my.cnf находится по адресу/etc/mysql/

После добавления этих строк:

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

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

Не забудьте перезапустить сервер:

sudo service mysql restart
М.Б.
источник
2
Примечание: это меняет настройки по умолчанию; это не меняет кодировку для любых существующих столбцов.
Рик Джеймс
24

NijaCat была близка, но указала на перебор:

Чтобы установить значение по умолчанию UTF-8, вы хотите добавить следующее в my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Затем, чтобы проверить:

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)
Дерек
источник
5
Хороший ответ. Возможно, краткое объяснение о том, какие части являются избыточными, поможет людям решить, что именно они хотят в своей конфигурации.
Майк Самуэль
@Derek, что [mysql] default-character-set=utf8тогда?
Pacerier
1
Группа опций [client] уже устанавливает опции для всех клиентов MySQL, которые читают файл my.cnf. Группа [mysql] устанавливает параметры только для двоичного файла «mysql», в частности. Если вы хотите установить параметр mysql, который не применяется к другим клиентам, целесообразно использовать эту группу, но установка одного и того же значения параметра в обоих местоположениях является излишней. dev.mysql.com/doc/refman/5.6/en/option-files.html
Дерек
@ Майк Сэмюэль, установка набора символов по умолчанию для utf8 уже подразумевает стандартный режим сортировки utf8_general_ci. С другой стороны, "init-connect = 'SET NAMES utf8'" является несколько интересной идеей, поскольку она пытается заставить всех клиентов, подключающихся к серверу, использовать utf8, но это применяется непоследовательно в зависимости от привилегий подключения подключающегося Пользователь и я подозреваю, что некоторые подключающиеся сторонние клиенты могут быть сбиты с толку, когда сервер переопределяет запрошенную ими кодировку. dev.mysql.com/doc/refman/5.6/en/charset-applications.html
Дерек
Для [mysqld]использования character-set-serverвместоdefault-character-set
Рик Джеймс
23

Я также обнаружил, что после установки default-character-set = utf8под [mysqld]заголовком MySQL 5.5.x не запускается под Ubuntu 12.04 (Precise Pangolin).

amiroff
источник
16
Это ошибка MySQL # 52047 . Под [mysqld], вы должны использовать character-set-serverвместо default-character-set. (Очень запутанно, я согласен!)
Матиас Биненс
Да. Устаревший в 5.0; снято в 5.5.
Рик Джеймс
22

MySQL v5.5.3 и выше:

Просто добавьте три строки только в разделе [mysqld]:

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

Примечание: В том числе skip-character-set-client-handshakeздесь отпадает необходимость включения как init-connectв [mysqld]и default-character-setв [client]и [mysql]секциях.

mug896
источник
1
Ух ты, так много повторяющихся ответов на этот вопрос, и все же это кажется самым простым. У меня тоже работает на v5.5.44.
Джастин Уотт
9

Под Xubuntu 12.04 я просто добавил

[mysqld]
character_set_server = utf8

в /etc/mysql/my.cnf

И результат

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)

Также посмотрите на http://dev.mysql.com/doc/refman/5.6/en/charset-server.html

Фалько
источник
Вам также нужно [client] default-character-set = utf8, иначе, когда вы используете mysql в командной строке, он не будет использовать utf8, потенциально разрушая любые резервные копии, которые вы передаете в файл.
Малхал
9

Все настройки, перечисленные здесь, являются правильными, но вот наиболее оптимальное и достаточное решение:

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

[client]
default-character-set = utf8

Добавьте это к /etc/mysql/my.cnf.

Обратите внимание, я выбираю тип сортировки utf8_unicode_ci из-за проблем с производительностью.

Результат:

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

И это когда вы подключаетесь как не-СУПЕР пользователь !

Например, разница между подключением как SUPER и не-SUPER пользователя (конечно, в случае сортировки utf8_unicode_ci ):

пользователь с SUPER прив .:

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

пользователь с не SUPER прив .:

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

Я написал исчерпывающую статью, подробно объясняющую, почему вы должны использовать тот или иной вариант. Рассматриваются все типы наборов символов и сопоставлений : для сервера, для базы данных, для соединения, для таблицы и даже для столбца.

Надеюсь это и статья поможет прояснить неясные моменты.

gahcep
источник
3
Я хотел бы прочитать вашу связанную статью, но не могу читать по-русски, и Google Translate не очень полезен для технических текстов. Из того, что я могу сказать, хотя это было бы очень интересно. Не могли бы вы рассмотреть возможность размещения английской версии?
Мартейн Химельс
2
Не могли бы вы объяснить, какой параметр не устанавливает параметры сортировки пользовательских соединений SUPER? (и есть ли решение)
KCD
@gahcep, вы заявили, что используете utf8_unicode_ciиз-за проблем с производительностью, тогда почему бы не использовать utf8_binвместо этого?
Pacerier
Привет, Paceriar. Хорошая точка зрения. Теперь я не уверен, правильно ли я выбрал использование utf8_unicode_ci. Никогда не тратил время на тестирование производительности.
Гахчеп
4

Версии 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

[ТуздЫ]

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

init_connect='SET collation_connection = utf8_unicode_ci'

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

init_connect='SET NAMES utf8'

НАЗВАНИЯ SET влияют на трех символов, то есть:

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
Лиханг Ли
источник
В документации отмечается, что character_set_serverне следует устанавливать вручную.
Брайан
Так что же такое современный подход? Мы можем явно передать character setпри установлении соединения с базой данных, однако выглядит немного раздражает.
Лиханг Ли
На самом деле я допустил ошибку. Документация говорит, что character_set_database не должен быть установлен динамически. Не упоминает character_set_server. Тем не менее, я не уверен, что вам нужно беспокоиться о character_set_server, так как я думаю, что это влияет только на значение по умолчанию для вновь созданной базы данных?
Брайан
Как я уже упоминал выше и я провел эксперимент только сейчас, character_set_serverв [mysqld]разделе затронут character_set_databaseи character_set_server. Теперь я думаю, что хорошей практикой является явное указание того, character setчто вы хотите использовать при создании базы данных, таблицы и соединения с базой данных. Честно говоря, документация mysqlне так легко понять. Знаете ли вы, есть ли общий способ выполнить все настройки character setи collationнастройки в MySQL?
Лиханг Ли
4

На 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.

Нгуен Ван Тинь
источник
1

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

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

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

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

paiego
источник
1

Если вас смущают ваши настройки для клиента и 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».

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

Джон Вэнь
источник
0

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

郭浩伟
источник
-1

Изменить персонаж MySQL:

клиент

default-character-set=utf8

туздЫ

character_set_server=utf8

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

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

Наконец:

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