Гид по технологиям

Кодировки MySQL при восстановлении дампа

• 6 min read • Базы данных • Обновлено 26 Nov 2025
Кодировки MySQL при восстановлении дампа
Кодировки MySQL при восстановлении дампа

Что важно знать

Коротко о терминах:

  • client — программа или скрипт, который подключается к серверу MySQL.
  • connection — параметры, согласованные при установке соединения (включая ожидаемую кодировку).
  • collation — правила сравнения и сортировки строк (не влияет на кодировку при отправке данных).

MySQL получает и отдаёт данные в кодировке, согласованной на соединении. Если при подключении ожидается utf8, сервер будет принимать и отдавать utf8-строки; при необходимости MySQL сам конвертирует данные внутри. Поэтому для успешного восстановления дампа достаточно обеспечить, чтобы кодировка файла дампа совпадала с кодировкой соединения клиента и сервера.

Important: настройка collation не решит проблемы с «умляутами» или неправильной кодировкой при импорте — она только управляет сортировкой и правилами сравнения.

Почему проблема возникает и как MySQL работает с кодировками

Когда вы делаете дамп и затем восстанавливаете его на другой сервер, два фактора критичны:

  1. Какая кодировка стоит по умолчанию на новом сервере (character_set_connection / character_set_client). Эта информация видна в MySQLDumper и в самом MySQL.
  2. В какой кодировке сохранён ваш дамп.

Если эти кодировки совпадают — импорт пройдёт без проблем. Если нет — возникает несоответствие, и тексты будут выглядеть искажённо.

Пример поведения сортировки (это про collation, не про кодировку):

Таблица с тремя строками (колонка Name):

  • 1 Zapp, Frank
  • 2 Zäppel, Ernst
  • 3 Zander, Bernd

ORDER BY Name с collation latin1_german1_ci (dictionary) даст: Zander, Zappa, Zäppel. С latin1_german2_ci (phonebook) — Zäppel, Zander, Zappa. Это показывает, что collation влияет на порядок, но не решает кодировочные ошибки.

Как определить кодировку сервера

В интерфейсе MySQLDumper: Home / MySQL-Variables / Variables — ищите character_set_client и character_set_connection.

Если вы работаете напрямую с MySQL, выполните:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

В результате вы увидите, какие кодировки и сопутствующие параметры установлены на сервере.

Практическая пошаговая инструкция для восстановления дампа

  1. Скачайте дамп, созданный MySQLDumper. Если файл сжат (*.sql.gz), распакуйте его (gunzip, 7-Zip и т. п.).
  2. Проверьте кодировку файла. Если вы не уверены, попробуйте открыть файл в текстовом редакторе, который показывает кодировку (Notepad++, Visual Studio Code, Sublime Text).
  3. Если кодировка файла совпадает с character_set_connection сервера — импортируйте напрямую. Например:
mysql --default-character-set=utf8 -u user -p database < dump.sql

Замените utf8 на нужную кодировку, если сервер ожидает другую.

  1. Если кодировка файла не совпадает, перекодируйте файл в нужную кодировку. Два варианта:
  • Использовать iconv (CLI):
iconv -f OLD_ENCODING -t NEW_ENCODING dump.sql > dump-converted.sql

Пример:

iconv -f latin1 -t utf8 dump.sql > dump-utf8.sql
  • Или открыть файл в редакторе и сохранить в нужной кодировке без BOM:
    • Notepad++: Кодировки → Кодировать в UTF-8 без BOM → Сохранить.
    • TextPad / VS Code: File → Save As → выбрать нужную Encoding.
  1. После перекодировки (если файл был распакован, заново запакуйте, если нужно) загрузите файл на сервер и импортируйте через MySQLDumper или напрямую через mysql, указав –default-character-set.

  2. Проверка после восстановления: выполните выборки и осмотрите строки с иностранными символами. Проверьте количество записей (SELECT COUNT(*)) и несколько контрольных строк.

Команды и примеры

  • Просмотр настроек в MySQL:
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_connection';
  • Установка кодировки для текущего соединения (вручную):
SET NAMES 'utf8';
  • Импорт дампа, принудительно указав кодировку клиента:
mysql --default-character-set=utf8 -u user -p database < dump.sql
  • Перекодировка файла через iconv:
iconv -f latin1 -t utf8 dump.sql > dump-utf8.sql
  • Работа с gzip на *nix:
gzip dump.sql            # создаст dump.sql.gz
gunzip dump.sql.gz       # распакует

На Windows вы можете использовать 7-Zip для упаковки/распаковки, но обращайте внимание на правильную распаковку без повреждений — старые версии архиваторов иногда дают проблемы с корректной распаковкой текстовых файлов.

Когда описанный подход не сработает (примеры и исключения)

  • Файл уже был «двойно закодирован» (double-encoded). Это случай, когда текст сначала был сохранён в одной кодировке, а потом неправильно переконвертирован и сохранён снова. В таких случаях простая перекодировка может усугубить проблему; нужна диагностика и, возможно, восстановление из оригинального источника.
  • Двоичные поля (BLOB) или файлы, в которых часть содержимого не текстовая — их нельзя просто перекодировать как текст.
  • Дамп был создан программой, которая вставляет управляющие последовательности или изменяет байтовый порядок; тогда нужно понять формат и корректно извлечь SQL.

Если вы не уверены в состоянии дампа — сделайте тестовую базу и импортируйте туда файл, прежде чем трогать боевой сервер.

Альтернативные подходы

  • Попросить исходный сервер экспортировать дамп в требуемой кодировке (если есть доступ). Например, mysqldump поддерживает параметр –default-character-set.
  • Использовать промежуточный сервер/контейнер с той же конфигурацией и импортировать дамп туда, затем сделать новый экспорт уже в нужной кодировке.
  • Программно читать дамп и корректировать проблемные строки через скрипты (Python, Perl) с явной детекцией и конверсией кодировок.

Руководство для ролей (чек-листы)

Администратор БД:

  • Проверить character_set_client и character_set_connection на целевом сервере.
  • Сообщить разработчикам/операторам требуемую кодировку (например, utf8/utf8mb4).
  • Резервная копия текущей базы перед импортом.

Разработчик / Оператор импорта:

  • Проверить кодировку дампа с помощью текстового редактора или утилиты file/enca.
  • При необходимости перекодировать через iconv или редактор.
  • Импортировать с указанием –default-character-set.
  • Выполнить контрольные выборки и сверку количества строк.

Критерии приёмки

  • Все текстовые поля с иностранными символами отображаются корректно.
  • Количество записей до и после восстановления совпадает.
  • Критические запросы работают без ошибок, связанные с кодировкой.

Мини-методология (быстрый план действий)

  1. Определите кодировку сервера (MySQLDumper / SHOW VARIABLES).
  2. Проверяйте кодировку файла дампа.
  3. При необходимости — перекодируйте файл в кодировку сервера или укажите её при импорте.
  4. Тестируйте на копии базы.

Советы и эвристики

  • Если сервер современный и вы планируете поддержку полноценной Юникод-совместимости — используйте utf8mb4 для текста и collation, совместимую с ним.
  • Если не знаете исходную кодировку, пробуйте common candidates: utf8, latin1. Делайте тесты на копии.
  • Никогда не применяйте массовые операции на боевой базе без резервной копии.

Примеры диагностики: тесты и приёмочные кейсы

  • Тест 1: импорт дампа в тестовую БД, проверить визуально 10 строк с диакритикой.
  • Тест 2: сравнить контрольную сумму (например, md5sum) для ключевых текстовых полей до экспорта и после импорта (при доступе к исходной БД).
  • Тест 3: выполнить SELECT … WHERE field LIKE ‘%тест%’ для строк с национальными символами — убедиться, что поиск работает ожидаемо.

Краткая галерея крайних случаев

  • Файл в кодировке CP1252, сервер ожидает utf8 — результат: «кракозябры».
  • Файл уже в utf8, но сервер инициализирован под latin1 — возможны искажения.
  • Данные «умляутов» выглядят корректно, но сортировка неверная — это задача collation, а не кодировки.

Однострочные определения (глоссарий)

  • character_set_client — кодировка, в которой клиент шлёт данные серверу.
  • character_set_connection — кодировка, согласованная на начале соединения (включает client/ results/ database).
  • collation — правила сравнения и сортировки строк.

Итог

Чтобы успешно восстановить дамп на другом сервере, убедитесь, что кодировка файла соответствует кодировке соединения/сервера. Если не совпадает — перекодируйте файл или укажите кодировку при импорте. Collation не лечит проблемы кодировки; оно нужно для правильной сортировки и сравнения.

Notes: начав с версии 1.21b12 MySQLDumper стал использовать utf8 как стандарт для своих дампов, но при восстановлении всё равно ориентируйтесь на текущие настройки сервера и кодировку источника.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро