Как сделать чтобы в 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

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

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com 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 )

Google+ photo

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

Connecting to %s