Ошибка #1273 — Unknown collation: utf8mb4. Обновляем MySQL в Denwer

Сегодня: 28.03.2024, Четверг

MySQL

Большинство web-мастеров, владельцев сайтов и людей, так или иначе сталкивающихся с web-программированием, рано или поздно встают перед задачей переноса базы данных сайта с одного хостинга на другой. Кроме этого, зачастую, у людей, тесно связанных с web-технологиями, возникает необходимость развернуть сайт локально на компьютере, к примеру, под программным решением Denwer. И в той, и в другой ситуации пользователь может столкнуться с различными ошибками экспорта/импорта базы данных. Об устранении одной из таких ошибок и пойдёт речь дальше.

Причины возникновения ошибки "#1273 - Unknown collation"

Итак, при импорте базы данных на хостинг или на Denwer процесс загрузки может быть прерван с ошибкой следующего содержания:

Ошибка
SQL-запрос:

CREATE TABLE  `wp_commentmeta` (

 `meta_id` BIGINT( 20 ) UNSIGNED NOT NULL ,
 `comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT  '0',
 `meta_key` VARCHAR( 255 ) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL ,
 `meta_value` LONGTEXT COLLATE utf8mb4_unicode_520_ci
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci;

Ответ MySQL: Документация

#1273 - Unknown collation: 'utf8mb4_unicode_520_ci' 

Последней строкой может быть указана и другая кодировка, например, utf8mb4_unicode_ci и тому подобное.

Вот как эта ошибка выглядит в браузере:

Ошибка #1273 - Unknown collation 'utf8mb4_unicode_520_ci'

Причина возникновения ошибки #1273 в том, что в новых версиях СУБД MySQL добавляются новые кодировки сопоставления, которых может не оказаться на хостинге и в последних версиях продукта Denwer.
Исходя из озвученной причины ниже приведём три различных варианта решения проблемы Unknown collation.

Обновление MySQL на Denwer

Оптимальный вариант решения ошибки #1273, по нашему мнению, это обновление версии системы sql до актуального релиза. Главный минус данного способа заключается в том, что для его реализации вам необходимо иметь доступ до СУБД на сервере.
То есть, этот вариант подходит в том случае, если вы работаете с программным продуктом Denwer, расположенным на вашем компьютере (не рассматриваем ситуацию, при которой вы используете VDS - виртуальный выделенный сервер).

Чтобы обновить систему MySQL в установленном пакете Denwer на компьютере, в первую очередь, необходимо скачать нужные файлы новой версии sql. Предлагаем вам сделать это одним из двух способов:

  1. Скачать один из прикреплённых к статье файлов с архивом, соответствующих разрядности вашей операционной системы: mysql-5.7.19-winx86 или mysql-5.7.17-winx64
  2. Скачать на официальном сайте полный архив MySQL Community Server под вашу версию операционной системы и извлечь оттуда файлы mysql.exe, mysqlcheck.exe, mysqld.exe и mysql_upgrade.exe, расположенные в каталоге bin

Далее останавливаем Денвер запуском ярлыка Stop Denwer, переходим на компьютере в директорию MySQL установленного пакета Denwer. По умолчанию задан следующий путь:

C:\WebServers\usr\local\mysql-5.5\bin

В этот каталог помещаем скачанные exe-файлы и соглашаемся на замену.
Запускаем Денвер ярлыком Start Denwer и повторно импортируем базу данных. Ошибка устранена.

Экспорт базы данных сайта в режиме совместимости со старым MySQL

Этот способ обхода ошибки Unknown collation: utf8mb4 может быть использован в том случае, если мы имеем возможность повторного экспорта базы данных. Данное условие вытекает из того, что основные действия в этом варианте производятся на этапе создания бэкапа, а не его загрузки на сервер.

Суть заключается в том, что перед выгрузкой базы данных нам необходимо активировать расширенные настройки в приложении создания бэкапа и включить режим совместимости выгружаемой базы.

Рассмотрим, как выгрузить базу сайта в режиме совместимости MySQL на примере web-приложения phpMyAdmin.
Заходим в phpMyAdmin, выбираем нашу базу в списке и переходим на вкладку Экспорт

Экспорта базы данных сайта в phpMyAdmin

На открывшейся странице в разделе Метод экспорта ставим флаг-галку у пункта Обычный - отображать все возможные настройки. Теперь прокручиваем страницу вниз до раздела Параметры формата и в пункте Максимальная совместимость с системой базы данных, или устаревшей версией MySQL: из выпадающего списка выбираем вариант MYSQL40.
Остальные параметры можно не менять, скроллим страницу до конца и нажимаем кнопку Вперёд.

Сохранение базы сайта в режиме совместимости MYSQL40

Сформированный архив будет импортироваться на сервер с MySQL старой версии без ошибок.

Если после этого при открытии страничек сайта будут проблемы с кодировкой: некорректное отображение текста, "иероглифы" и так далее - то дополнительно будет необходимо в файле конфигурации вашего CMS (к примеру, в WordPress это файл wp-config.php) заменить параметр, отвечающий за кодировку с utf8mb4 на utf8, сохранить внесённые изменения и обновить страницу

Ручное изменение кодировки базы данных сайта

И последний пример борьбы с ошибкой импорта базы данных сайта, который мы рассмотрим в рамках текущей публикации - это изменение кодировки SQL базы в таблице.
Проделать это можно как с помощью специальных sql-команд, так и вручную. Рассмотрим второй вариант.

Для того, чтобы отредактировать кодировку в базе, нам необходимо разархивировать бэкап сайта, если он находится в сжатой папке zip или rar. После этого открываем получившийся файл с расширением *.sql в удобном текстовом редакторе, например, в Notepad++
В окне текстового редактора нам необходимо заменить значения utf8mb4_unicode_ci и utf8mb4_unicod_520i на utf8_general_ci. Кроме этого, если в таблицах базы встречается значение utf8mb4, то, как и в предыдущем способе, его также надо изменить на utf8.

После проделанной корректировки сохраняем изменённый файл и повторяем импорт базы данных на сервер.

Мы рассмотрели три способа борьбы с ошибкой #1273 - Unknown collation: 'utf8mb4_unicode_ci'.
Надеемся, что вам удалось побороть данную проблему одним из вариантов.



Добавить комментарий

Ошибка #1273 — Unknown collation: utf8mb4. Обновляем MySQL в Denwer: 3 комментария


  1. Григорий

    Спасибо за статью! Помогло ручное изменение кодировки базы данных сайта

  2. MichaelEcowl

    Благодарю за помощь в этом вопросе, теперь я не допущу такой ошибки.