На це питання вже є багато відповідей, але Матіас Байненс зазначив, що "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). Після цього таблицю можна перетворити.
utf8mb4
, тобто справжній UTF-8 з повною підтримкою Unicode. Див. Розділ Як підтримувати повний Unicode в базах даних MySQL .