#1273 – 未知整理:'utf8mb4_unicode_ci'Cpanel

我有我的本地机器上的wordpress数据库,我想转移到Cpanel托pipe的phpMyAdmin。 但是,当我尝试将数据库导入到环境中时,我不断收到此错误

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

我试图谷歌和唯一的解决scheme,我可以find的是这一个phpmysql错误 – #1273 – #1273 – 未知的整理:'utf8mb4_general_ci' ,现在是没有太大的帮助。 我已经尝试清除cookie,但它仍然无法正常工作。 请帮忙!

我有同样的问题,我们所有的服务器运行旧版本的MySQL。 这可以通过运行PHP脚本来解决。 将这段代码保存到一个文件中,并运行它input数据库名称,用户名和密码,然后将sorting规则从utf8mb4/utf8mb4_unicode_ciutf8/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>"; } ?> 

在这篇文章中的技术为我工作

1)点击数据库的“导出”标签

2)点击“自定义”单选button

3)转到标题为“特定于格式的选项”的部分,并将“数据库系统或更早版本的MySQL服务器”的下拉列表从“NONE”更改为“MYSQL40最大输出兼容性”。

4)滚动到底部并点击“开始”。

我不确定如果这样做会导致任何数据丢失,但在一次我尝试过,我没有注意到任何。 没有人在上面的论坛上回复过。

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

最好的办法是将数据库导出到.sql ,在Notepad ++上打开它,然后转到“search和replace”。 然后你把search“utf8mb4”“utf8”replace。 它会将utf8mb4_unicode_cireplace为utf8_unicode_ci 。 现在你到你的PhpMyAdmin(目的地),并将数据库归类设置为utf8_unicode_ci (操作>归类)。

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

由于安全原因 ,Wordpress 4.2引入了对“utf8mb4”字符编码的支持,但只有MySQL 5.5.3和更高版本支持它。 安装程序(和更新程序)处理这种情况的方式是检查您的MySQL版本, 只有在支持的情况下 ,您的数据库才会升级到utfmb4。

这在理论上听起来不错,但问题(如你所发现的)是当你从一个支持utf8mb4的MySQL服务器迁移数据库到一个没有的数据库。 而另一种方式应该工作,这基本上是一个单向的操作。

正如Evster指出的那样,您可能已经使用PHPMYAdmin的“导出”function成功了。 使用“ 导出方法:自定义 ”,对于“ 数据库系统或较老的MySQL服务器最大化输出兼容性: ”下拉select“ MYSQL 40 ”。

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

 $ mysqldump --compatible=mysql4 

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

最后,对于任何使用stream行的WP Migrate DB PRO插件的人来说, 这个Wordpress.org线程中的一个用户报告说迁移总是处理得当,但是我找不到任何官方的东西。

WP迁移数据库插件将数据库从一个归类转换为另一个归类到其他数据库时,它在5.5.3之前或之后的主机之间移动4.2个站点

目前,似乎没有办法select退出数据库更新。 所以,如果你正在使用一个工作stream程,你从一个服务器或本地主机的MySQL> 5.5.3迁移到一个使用较旧的MySQL版本,您可能会运气不佳。

wp-config.php中有一行:

 define('DB_CHARSET', 'utf8mb4'); 

如果按照Markouver / Evster的说明进行操作,请不要忘记将生产服务器上的这一行更改为

 define('DB_CHARSET', 'utf8'); 

以修复破碎的4字节字符

在我的情况下,事实certificate我的
新的服务器运行MySQL 5.5
旧的服务器运行MySQL 5.6
所以当我尝试导入从旧服务器导出的.sql文件时出现此错误。

MySQL 5.5不支持utf8mb4_unicode_520_ci ,但是
MySQL 5.6的确如此。

更新到新的服务器上的MySQL 5.6解决了错误的整理!

如果你想保留MySQL 5.5,你可以:
– 复制你的导出的.sql文件
– replaceutf8mb4unicode520_ciutf8mb4_unicode_520_ci实例
…用utf8mb4_unicode_ci
– 导入您更新的.sql文件。

经过长时间的研究,我find了上面的解决办法:

  1. 首先,将wp-config.php> Database DB_CHARSET默认值更改为“utf8”

  2. 点击数据库的“导出”标签

  3. 点击“自定义”单选button

  4. 转到标题为“特定于格式的选项”的部分,并将“数据库系统或更早版本的MySQL服务器”的下拉列表从“NONE”更改为“MYSQL40”。

  5. 滚动到底部并点击开始

然后你在。

似乎你的主机没有提供能够运行utf8mb4整理表的MySQL版本。

WordPress版本更改为utf8mb4版本4.2(2015年4月23日发布)以支持Emojis,但您需要MySQL 5.5.3才能使用它。 5.5.3。 是从2010年3月份开始的,所以通常应该可以广泛使用。 Cna你检查你的主机是否提供该版本?

如果不是,升级是不可能的,你可能不得不寻找另一个主机运行最新的WordPress版本(你应该总是这样做,出于安全原因)。

所以我解决了这个问题,从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 

(可选)创build一个.sql.gz文件:

 $ gzip database_name.sql 

说明

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

正如在这个答案中所解释的,这只是从phpMyAdmin的这个选项的等效: “数据库系统或更老的MySQL服务器,以最大化输出兼容性:”下拉select“MYSQL 40”

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

我们需要这个,来解决这个问题:

错误1064(42000)第18行:您的SQL语法错误; 检查与您的MySQL服务器版本相对应的手册,在第9行的“TYPE = InnoDB”附近使用正确的语法

我也遇到过这个问题。 我的解决scheme是使用Sequel Pro打开本地数据库,并在导入之前将每个表的编码和sorting更新为utf8 / utf8_bin。

最简单的方法是将数据库导出到.sql ,在Notepad ++上打开它,然后将utf8mb4_unicode_cireplace为utf8mb4_unicode_ciutf8_unicode_cireplace为utf8 。 另外不要忘记将数据库sorting规则更改为utf8_unicode_ci (Operations> Collat​​ion)。