Как сделать чтобы в MySQL встала utf8mb4 пожалуйста

Очередной раз упоролся с переносом базы данных.

Кодировка utf8mb4 уже не такая новинка как пару лет назад и даже на большинстве шеред-хостингах админы наконец-то обновили софт и теперь она поддерживается, ура.

Сначала я пробовал импортировать SQL-файл вот так:

mysql \
  --user=korobochkin \
  --password="password" \
  --default-character-set=utf8mb4 \
  dbName < dbDump.sql

Но несмотря на корректный dbDump.sql, в импортированной БД вместо всяких четырехбайтных символов появлялись знаки вопросов.

Я подумал, что dbDump.sql изначально считывается криво и потом пихается в mysql и там уже не важно какая кодировка — считано криво же. Но, видимо, я не совсем представляю как работают < и > внутри Bash. Проверяем:

mysql \
  --user=korobochkin \
  --password="password" \
  --default-character-set=utf8mb4 \
  dbName

# Где-то в 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/ |
+--------------------------+----------------------------+

Вспомнил про wp db import — тоже криво импортировалось. Наверное, баг.

В итоге сделал с помощью двух файлов:

mysql \
  --user=korobochkin \
  --password="password" \
  < import-db-commands.sql \
;

# Внутри import-db-commands.sql
# Select desired DB
USE dbName;

# Enable the right charset
SET NAMES 'utf8mb4';

# Import DB from sql file
SOURCE dbDump.sql;

# Disconnect from SQL server
EXIT

Толи софт кривой, толи просто постучать где-то надо 🙂

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s