Сохранение multibyte символов в mysqldump (utf8mb4)

Категория: MySQL

При дампе БД с кодировкой utf8 не будут сохраняться 4-х байтные символы, например такие как эмотиконы.

Чтобы обеспечить дамп и восстановление эмотиконов нужно указать кодировку utf8mb4 вместо utf8 при дампе: 

mysqldump -ulocal -plocal --default-character-set=utf8mb4 DB_NAME > DB_NAME.sql
Внимание!

В phpmyadmin нельзя выбрать кодировку utf8mb4 при экспорте/импорте. Но, если сами таблицы в utf8mb4 и вы используете phpmyadmin 4.5, то при выбранной кодировке utf8, эмотиконы успешно сохраняются. В phpmyadmin 4 - мультибайтные символы НЕ сохраняются при экспорте!

Примечание

Для установки кодировки utf8mb4 на всю БД выполните:

SET NAMES utf8mb4;
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Установить кодировку на таблицу:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

На колонку:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(140) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

После этого оптимизируйте БД:

REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;

Или утилитой (--all-databases  если хотите оптимизировать все БД):

mysqlcheck -u root -p --auto-repair --optimize

#mysql multibute dump, #mysql dump utf8mb4

категория: MySQL