# 1273 - Неизвестное сопоставление: Cpanel 'utf8mb4_unicode_ci'

135

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

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

Я попытался найти google и единственное решение, которое я могу найти, это ошибка phpmysql - # 1273 - # 1273 - Неизвестная сортировка: 'utf8mb4_general_ci', которая как к настоящему времени не очень помогает. Я попытался очистить файлы cookie, но он все равно не сработает. Пожалуйста, помогите!

Теги:
phpmyadmin
cpanel

12 ответов

94
Лучший ответ

У меня была такая же проблема, как и на всех наших серверах, работающих на старых версиях MySQL. Это можно решить, запустив PHP script. Сохраните этот код в файл и запустите его, введя имя базы данных, пользователя и пароль, и оно изменит настройку с utf8mb4/utf8mb4_unicode_ci на utf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace;" }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  mysql_select_db($dbname);
  $result=mysql_query('show tables');
  while($tables = mysql_fetch_array($result)) {
          foreach ($tables as $key => $value) {
           mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>
  • 0
    Мне очень помогло. провел почти несколько дней, чтобы исправить это на моем старом сервере. Вы действительно спасатель жизни. ;)
  • 44
    Это выглядит как перебор против mysqldump --compatible=mysql4
Показать ещё 7 комментариев
211

Техника в этом посте работала для меня

1) Перейдите на вкладку "Экспорт" для базы данных

2) Нажмите переключатель "Пользовательский"

3) Перейдите в раздел "Параметры, специфичные для формата", и измените раскрывающееся меню "Система баз данных или старый сервер MySQL для максимизации совместимости вывода с:" от NONE до MYSQL40.

4) Прокрутите страницу вниз и нажмите "GO".

Я не уверен, что это приведет к потере данных, однако в тот раз, когда я это пробовал, я не заметил. Также никто не отвечал на форумах, связанных с ним.

Редактировать 8/12/16. Я считаю, что экспорт базы данных таким образом заставляет меня потерять данные, сохраненные в Black Studio TinyMCE Visual Editor виджеты, хотя я не выполнил несколько тестов для подтверждения.

  • 0
    Работал на меня тоже, спасибо!
  • 0
    Спасибо, что все работает нормально
Показать ещё 12 комментариев
110

Лучше всего экспортировать свою базу данных в .sql, открыть ее на Notepad ++ и перейти в "Поиск и замена". Затем вы положите "utf8mb4" на поиск и "utf8" на замену. Он заменит utf8mb4_unicode_ci на utf8_unicode_ci. Теперь перейдите в свой PhpMyAdmin (пункт назначения) и установите сопоставление БД на utf8_unicode_ci (Операции > Сортировка).

  • 2
    Вау, это на самом деле отлично сработало для меня!
  • 2
    спасибо - вытащил меня из дыры
Показать ещё 9 комментариев
29

Я использую это в linux:

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

затем восстановите файл your_file.sql

mysql -uyourdbuser -pyourdbpasswd yourdb < your_file.sql
  • 0
    Это решение отлично работает (адаптировано для vim).
  • 0
    Потрясающие! Работал отлично.
Показать ещё 3 комментария
24

В Wordpress 4.2 появилась поддержка кодировки символов "utf8mb4" для причин безопасности, но только поддержка MySQL 5.5.3 и выше. Способ, которым установщик (и updater) справляется с этим, заключается в том, что он проверяет вашу версию MySQL, и ваша база данных будет обновлена ​​до utfmb4, только если она будет поддерживаться.

Это звучит здорово в теории, но проблема (как вы обнаружили) - это когда вы переносите базы данных с сервера MySQL, поддерживающего utf8mb4, на тот, который этого не делает. В то время как другой путь должен работать, это в основном односторонняя операция.

Как уже указывал Evster, у вас может быть успех с использованием функции "Экспорт" PHPMYAdmin. Используйте "Метод экспорта: Пользовательский" и для "Системы баз данных или более старого сервера MySQL, чтобы максимизировать совместимость вывода с:" раскрывающимся списком выберите "MYSQL 40".

Для экспорта командной строки с использованием mysqldump. Посмотрите на флаг:

$ mysqldump --compatible=mysql4

Примечание. Если в базе данных есть 4-байтовые символы, они будут повреждены.

Наконец, для тех, кто использует популярный плагин WP Migrate DB PRO, пользователь в этом потоке Wordpress.org сообщает, что миграция всегда обрабатывается правильно, но я wasn ' t может найти что-нибудь официальное.

Плагин WP Migrate DB переводит базу данных из одной сортировки в другую, когда она перемещает 4.2 сайта между хостами с pre- или post-5.5.3 MySQL

В настоящее время не существует способа отказаться от обновления базы данных. Поэтому, если вы используете рабочий процесс, в котором вы переносите сайт из сервер или localhost с MySQL > 5.5.3 к одному, который использует более старую версию MySQL, вам может быть не повезло.

  • 0
    Изменение совместимости на «MYSQL 40» полностью сработало для меня.
  • 3
    Если вы затем попытаетесь импортировать совместимый с mysql4 дамп в базу данных post v5.5.3 (я использую 5.5.28), то произойдет сбой, поскольку скрипт включает в себя TYPE=MyISAM который был удален в v5.1. Выполните поиск и замените на ENGINE=MyISAM . Я не мог обойти это, используя параметры вывода mysqldump .
Показать ещё 2 комментария
15

В wp-config.php есть строка:

define('DB_CHARSET', 'utf8mb4');

Если вы следуете инструкциям Markouver/Evster, не забудьте изменить эту строку на рабочем сервере к

define('DB_CHARSET', 'utf8');

чтобы исправить сломанные 4-байтные символы

  • 1
    Также не забудьте изменить define('DB_COLLATE', 'utf8_general_ci'); также. Это помогло мне.
12

В моем случае получается мой запускался новый сервер MySQL 5.5,
старый сервер работал MySQL 5.6.
Поэтому я получил эту ошибку при попытке импортировать файл .sql, который я экспортировал с моего старого сервера.

MySQL 5.5 не поддерживает utf8mb4_unicode_520_ci, но
MySQL 5.6 делает.

Обновление до MySQL 5.6 на новом сервере решает сопоставление ошибки!

Если вы хотите сохранить MySQL 5.5, вы можете: - сделайте копию экспортированного файла .sql
- заменить экземпляры utf8mb4unicode520_ci и utf8mb4_unicode_520_ci
... с помощью utf8mb4_unicode_ci
- импортируйте обновленный файл .sql.

  • 0
    У меня тоже сработало. Спасибо :)
  • 1
    Работал как шарм. Большое спасибо
Показать ещё 1 комментарий
9

После долгого исследования я нашел решение выше:

  • Сначала вы меняете wp-config.php > Базу DB_CHARSET по умолчанию на "utf8"

  • Перейдите на вкладку "Экспорт" для базы данных

  • Нажмите переключатель "Пользовательский"

  • Перейдите в раздел "Параметры, специфичные для формата", и измените   выпадающего списка "Система баз данных или старый сервер MySQL для максимизации   совместимость вывода с:" от NONE до MYSQL40.

  • Прокрутите вниз и нажмите go

Затем вы находитесь.

  • 0
    Это сработало для меня, спасибо!
  • 0
    у меня тоже работает, спасибо!
Показать ещё 1 комментарий
7

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

Таблицы WordPress были изменены на utf8mb4 с версией 4.2 (выпущена 23 апреля 2015 г.) для поддержки Emojis, но вам понадобится MySQL 5.5.3 для ее использования. 5.5.3. с марта 2010 года, поэтому он обычно должен быть широко доступен. Cna вы проверяете, поддерживает ли ваш хостер эту версию?

Если нет, и обновление невозможно, вам, возможно, придется искать другого хостера для запуска последних версий WordPress (и вы всегда должны это делать по соображениям безопасности).

  • 1
    Вы можете проверить свою версию MySQL через командную строку с помощью «mysql -V»
2

Итак, я решил таким образом, от MySQL 5.6 до MySQL 5.5:

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(Необязательно) Создайте файл .sql.gz:

$ gzip database_name.sql 

Описание

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

Как объясняется в ответе , это всего лишь эквивалент этих параметров от phpMyAdmin: "Система баз данных или более старый сервер MySQL для максимальной совместимости вывода с:" выпадающим меню "MYSQL 40".

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

Нам нужно это, чтобы решить эту проблему:

ОШИБКА 1064 (42000) в строке 18: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "TYPE = InnoDB" в строке 9

  • 1
    Обратите внимание, если вы используете OS OS версии sed: $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql . Если вы хотите сохранить копию как database_name.sql.bak до замены sed: $ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
  • 0
    Вы также можете встроить sed .
1

У меня также возникла эта проблема. Решение, которое работало для меня, заключалось в открытии локальной базы данных с Sequel Pro и обновлением Кодирование и Collation до utf8/utf8_bin для каждой таблицы перед импортом.

0

Самый простой способ - экспортировать свою базу данных в .sql, открыть ее на Notepad ++ и "Искать и заменить" utf8mb4_unicode_ci на utf8_unicode_ci, а также заменить utf8mb4 на utf8. Также не забудьте изменить настройку базы данных на utf8_unicode_ci (Operations > Collation).

  • 1
    Это не похоже на самый простой способ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню