Змінити набір символів 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

Це правильний спосіб впоратися з цим?


19
Зауважте, що кращим за умовчанням буде utf8mb4, тобто справжній UTF-8 з повною підтримкою Unicode. Див. Розділ Як підтримувати повний Unicode в базах даних MySQL .
Mathias Bynens

@Jorre, чи заперечуєте ви проти цього, щоб це було так, щоб 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

Якщо ви хочете змінити набір символів для існуючої БД, дайте мені знати ... ваше питання не вказало його безпосередньо, тому я не впевнений, чи це ви хочете зробити.


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 = 'НАЛАШТУЙТЕ ІМЕННІ utf8mb4' набір символів-сервер = utf8mb4 та utf8mb4 в інших місцях, як згадувалося вище.
Чемпі

12
У Ubuntu 12.04 це працювало для мене - якщо я видалив перший рядок після [mysqld].
Брендон Бертелсен

4
Схоже, набір символів за замовчуванням більше не дозволений у розділі [mysqld]
marsbard

4
Зауважте, що якщо UTF-8 - це те, що ви хочете, не використовуйте utf8набір MySQL . Використовуйте utf8mb4замість цього.
Mathias Bynens

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

Чи пов’язаний ваш перший рядок max_allowed_packet = 64М з цією проблемою 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- тобто префікс з 'loose-'. Це робить mysqlbinlogщасливим, якщо вам потрібно використовувати його - google для: mysqlbinlog : "default-default-set-character" .
KajMagnus

Це init-connect='SET NAMES utf8'справді потрібно? Якщо ні, ми точно не зможемо обійтися без цього для виконання.
datasn.io

56

На це питання вже є багато відповідей, але Матіас Байненс зазначив, що "utf8mb4" слід використовувати замість "utf8", щоб мати кращу підтримку 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)

character_set_system завжди 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: символ_set_client, символ_сет_контакт, характер_набір_результатів, співставлення_з'єднання залишаються на латині1. Випуск SET NAMES utf8(utf8mb4 недоступний у цій версії) встановлює їх також на utf8.


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


Я дотримувався ваших налаштувань, але виявляю, що character_set_databaseвсе ще є utf8і collation_databaseє utf8_bin`. Я щось пропустив?
Стюарт

Знайшов те, що я пропустив. Ці 2 налаштування встановлюються при створенні самої бази даних. Дивіться це питання; stackoverflow.com/questions/22572558/…
Стюарт

1
додайте character-set-client-handshake = FALSEв розділ [mysqld], тому він завжди використовуватиме кодування за замовчуванням, навіть якщо ви помилитесь на рівні програми
Лукас Лієсіс

привіт, я спробував це рішення, але все ще не можу показати символу_set_client | utf8mb4. це utf8. просто символи_set_database utf8mb4 та znak_set_server utf8mb4 інші utf8mb4 інші не змінені. Будь ласка, допоможіть мені
Бхавін Чаухан

@ baic6 Я пропоную додати примітку, що пояснює, чому лише індексовані стовпці можуть викликати проблему. Обмеження 767 байтів є лише для індексованих стовпців, оскільки обмеження для "ключа" s. Для неіндексованих стовпців взагалі це не стосується. Якщо стовпець мав значення з максимальною довжиною байтів, скажімо, 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)

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змінило загальний запис на unicode, тому всі три були послідовними.
Вогень

2
На MySQL 5.6 рукостискання пропуску символів-набір-клієнт не робить того, що сказав @Vaughany. Будь-яка пропозиція?
Абабне А

4
skip-character-set-client-handshakeЗробив це для мене (поряд з «символьний набір-сервер» і «сортування-сервер», звичайно - на Debian 7). В init_connectи не зробити різницю з або без skipі , здається зайвим. +1 і дякую.
Джефф

3
Пропустити набір символів-клієнт-рукостискання ігнорує інформацію про набір символів, надіслану клієнтом. Приємно примушувати конкретний набір символів під час спілкування, але якщо клієнт очікує чогось іншого, це може призвести до проблем. Я б сказав, що вам краще вказати це на клієнті (вашій заяві).
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/uk/option-files.html
Дерек

@Mike Samuel, встановлення символу за замовчуванням на utf8 вже передбачає режим зіставлення за замовчуванням utf8_general_ci. З іншого боку, "init-connect =" SET NAMES utf8 "" є дещо цікавою ідеєю, оскільки вона намагається змусити всіх клієнтів, що підключаються до сервера, використовувати utf8, але це застосовується непослідовно, залежно від привілеїв підключення для підключення Користувач, і я підозрюю, що деякі підключені сторонні клієнти можуть бути заплутані, коли сервер переорієнтується на запрошену набір шаблонів. dev.mysql.com/doc/refman/5.6/uk/charset-applications.html
Дерек

Для [mysqld]використання character-set-serverзамістьdefault-character-set
Рік Джеймс

23

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


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]секціях.


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/uk/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 та не-SUPER користувачем (звичайно, у випадку зіставлення utf8_unicode_ci ):

користувач із SUPER priv .:

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

Я написав вичерпну статтю (рос.), В якій детально пояснював, чому слід використовувати той чи інший варіант. Розглядаються всі типи наборів символів та зібрань : для сервера, для бази даних, для з'єднання, для таблиці та навіть для стовпців.

Сподіваюсь, це і стаття допоможуть з’ясувати незрозумілі моменти.


3
Я б хотів, щоб я міг прочитати вашу пов’язану статтю, але я не можу читати російську мову та перекладати Google - це не так корисно для технічних текстів. З того, що я можу сказати, хоча це було б дуже цікаво. Чи можете ви розглянути можливість публікації англійської версії?
Martijn Heemels

2
Чи можете ви пояснити, який параметр не може встановити порівняння з'єднання користувачів SUPER? (і чи є рішення)
KCD

@gahcep, Ви заявили, що використовуєте utf8_unicode_ciчерез проблеми з продуктивністю, то чому б не використовувати utf8_binзамість цього?
Pacerier

Привіт, Paceriar. Гарна думка. Зараз я не впевнений, чи був мій вибір utf8_unicode_ciвзагалі правильним . Ніколи не витрачав час на тестування продуктивності.
gahcep


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

[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

У документації зазначається , що character_set_serverне повинні бути встановлені вручну.
Брайан

То який сучасний підхід? Ми можемо явно пройти це character setпри встановленні підключення до бази даних, однак це виглядає трохи прикро.
Ліханг Лі

Насправді я помилився. Документації говорять, що база даних символів_set_data не повинна встановлюватися динамічно. Не згадує символ_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)

1

Якщо у вас виникли проблеми з підтвердженням підтримки клієнтів набору персонажів за допомогою MySQL Workbench, пам’ятайте про наступне:

Важливо Усі з’єднання, відкриті MySQL Workbench, автоматично встановлюють набір символів клієнта на utf8. Змінення набору символів клієнта вручну, наприклад використання SET NAMES ..., може призвести до неправильного відображення символів MySQL Workbench. Для отримання додаткової інформації про набір символів клієнта див.

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


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

mysqld

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/ |
 +--------------------------+----------------------------+
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.