问题描述

我在本地机器上有一个 wordpress 数据库,我想转移到 Cpanel 上托管的 phpMyAdmin 。但是,当我尝试将数据库导入到环境中时,我会收到这个错误

#1273 - Unknown collation: 'utf8mb4_unicode_ci'

我已经尝试 google 了,唯一的解决方案,我可以找到这是一个 phpmysql error – #1273 – #1273 – Unknown collation: ‘utf8mb4_general_ci’,现在没有太多的帮助。我已经尝试清除 cookies,但仍然无法正常工作。请帮忙!

最佳解决方案

我有同样的问题,我们所有的服务器运行旧版本的 MySQL 。这可以通过运行 PHP 脚本来解决。将此代码保存到一个文件并运行它输入数据库名称,用户和密码,它会将归类从 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>";
}

?>

次佳解决方案

The technique in this post worked for me

1) 单击数据库的”Export” 选项卡

2) 单击”Custom” 单选按钮

3) 转到 「Format-specific 选项」 部分,将 「数据库系统或旧 MySQL 服务器的最大化输出兼容性」 从 NONE 更改为 MYSQL40 。

4) 滚动到底部,然后单击”GO” 。

我不确定如果这样做导致任何数据丢失,但在一次我试过它,我没有注意到任何。在与上述链接的论坛中回复的人也没有。

编辑 8/12/16 – 我相信以这种方式导出数据库会导致我丢失保存在 Black Studio TinyMCE Visual Editor 小工具中的数据,尽管我还没有运行多个测试来确认。

第三种解决方案

最好的办法是将您的数据库导出到.sql,使用记事本++打开它并转到 「搜索和替换」 。然后将”utf8mb4″ 放在搜索框上,并将”utf8″ 替换。它会将 utf8mb4_unicode_ci 替换为 utf8_unicode_ci 。现在,您转到 PhpMyAdmin(目标) 并将 DB 归类设置为 utf8_unicode_ci(Operations> Collat​​ion) 。

第四种方案

WordPress 4.2 引入了对 security reasons 的”utf8mb4″ 字符编码的支持,但只支持 MySQL 5.5.3 及更高版本。安装程序 (和更新程序) 处理这种情况的方法是它检查您的 MySQL 版本,只有在受支持的情况下,数据库才会升级到 utfmb4 。

这在理论上听起来不错,但问题 (正如您所发现的) 是将数据库从支持 utf8mb4 的 MySQL 服务器迁移到不支持 utf8mb4 的数据库。而另一方面应该是有效的,它基本上是一个 one-way 操作。

如 Evster 所指出的,您可能会使用 PHPMYAdmin 的”Export” 功能获得成功。使用 「导出方法:自定义」 和 「数据库系统或旧的 MySQL 服务器以最大化输出兼容性:」 下拉列表选择 「MYSQL 40」 。

对于使用 mysqldump 的命令行导出。看看国旗:

$ mysqldump --compatible=mysql4

注意:如果数据库中有 4 个字节的字符,它们将被损坏。

最后,对于任何使用流行的 WP Migrate DB PRO 插件的人来说,a user in this WordPress.org thread 报告说,迁移总是处理得当,但是我无法找到任何官方的内容。

The WP Migrate DB plugin translates the database from one collation to the other when it moves 4.2 sites between hosts with pre- or post-5.5.3 MySQL

在这个时候,似乎没有办法选择退出数据库更新。因此,如果您正在使用从服务器或本地主机迁移站点的工作流程与 MySQL> 5.5.3 使用较旧的 MySQL 版本,可能是运气不好的。

第五种方案

我在 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

第六种方案

wp-config.php 中有一行:

define('DB_CHARSET', 'utf8mb4');

如果您遵循 Markouver’s /Evster’s 说明,请勿忘记将生产服务器上的此行更改为

define('DB_CHARSET', 'utf8');

以修复破坏的 4 字节字符

第七种方案

经过长时间的研究,我找到了以上解决方案:

  1. 首先你改变了 wp-config.php> 数据库 DB_CHARSET 默认为”utf8″

  2. 单击数据库的”Export” 选项卡

  3. 单击”Custom” 单选按钮

  4. 转到 「Format-specific 选项」 部分,从 「NONE」 到 「MYSQL40」,更改 「数据库系统或旧的 MySQL 服务器以最大化与… 的输出兼容性」 的下拉列表。

  5. 滚动到底部,然后单击 go

然后你在。

第八种方案

看起来像你的主机不提供一个 MySQL-version,它能够运行 utf8mb4 排序规则的表。

WordPress 表更改为 utf8mb4 版本 4.2(发布于 2015 年 4 月 23 日) 支持 Emojis,但 you need MySQL 5.5.3 to use it. 5.5.3 。从 2010 年 3 月起,通常应该广泛使用。 Cna 你检查你的主机是否提供该版本?

如果没有,并且无法进行升级,则可能需要注意另一个主机才能运行最新的 WordPress 版本 (出于安全考虑,您应该始终执行此操作) 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。