我在本地计算机上有一个WordPress数据库,我想将其传输到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入环境时,我不断收到此错误:
#1273 - Unknown collation: 'utf8mb4_unicode_ci'
我试过谷歌周围,我能找到的唯一解决方案是这一个phpmysql error - #1273 - #1273 - Unknown collation: 'utf8mb4_general_ci',现在已经没有多少帮助了。我已经尝试清除cookie但它仍然无法正常工作。请帮忙!
我遇到了同样的问题,因为我们所有的服务器都运行旧版本的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>";
}
?>
所以我用这种方式解决了,从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
正如在这个answer中所解释的,这只是phpMyAdmin的相当于这个选项:“数据库系统或更老的MySQL服务器,以最大化输出兼容性:”下拉选择“MYSQL 40”。
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
我们需要这个来解决这个问题:
第18行的错误1064(42000):SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在第9行的“TYPE = InnoDB”附近使用正确的语法
我也遇到过这个问题。对我有用的解决方案是使用Sequel Pro打开本地数据库,并在导入之前为每个表更新Encoding and Collation到utf8 / utf8_bin。
最简单的方法是将数据库导出到.sql
,在Notepad ++上打开它,并将utf8mb4_unicode_ci
“搜索并替换”到utf8_unicode_ci
,并将utf8mb4
替换为utf8
。另外,不要忘记将数据库排序规则更改为utf8_unicode_ci
(Operations> Collation)。
在Notepad ++和ctrl + H.
上打开sql文件然后你在搜索上放“utf8mb4
”,在替换上放“utf8
”。那个问题将被解决。
The technique in this post worked for me
1)单击数据库的“导出”选项卡
2)单击“自定义”单选按钮
3)转到标题为“特定于格式的选项”的部分,并更改“数据库系统或较旧的MySQL服务器的下拉列表以最大化输出兼容性:”从NONE到MYSQL40。
4)滚动到底部,然后单击“开始”。
我不确定这样做是否会导致任何数据丢失,但是在我尝试过的一次中我没有注意到任何数据丢失。在上述论坛中回复的任何人都没有。
编辑8/12/16 - 我相信以这种方式导出数据库会导致我丢失保存在Black Studio TinyMCE Visual Editor小部件中的数据,尽管我没有运行多个测试来确认。
最好的办法是将数据库导出到.sql
,在Notepad ++上打开它,然后转到“搜索和替换”。然后你把“utf8mb4”放在搜索上,“utf8”放在替换上。它会将utf8mb4_unicode_ci替换为utf8_unicode_ci。现在转到PhpMyAdmin(目标)并将DB排序设置为utf8_unicode_ci
(Operations> Collation)。
我在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引入了对security reasons的“utf8mb4”字符编码的支持,但只有MySQL 5.5.3及更高版本支持它。安装程序(和更新程序)处理此问题的方式是它检查您的MySQL版本,并且只有在支持的情况下,您的数据库才会升级到utfmb4。
这在理论上听起来很棒,但问题(正如您所发现的)是将数据库从支持utf8mb4的MySQL服务器迁移到不支持utf8mb4的MySQL服务器。虽然反过来应该工作,但它基本上是单向操作。
正如Evster所指出的,您可能会成功使用PHPMYAdmin的“导出”功能。使用“导出方法:自定义”和“数据库系统或较旧的MySQL服务器以最大化输出兼容性:”下拉列表选择“MYSQL 40”。
对于使用mysqldump的命令行导出。看看旗帜:
$ mysqldump --compatible=mysql4
注意:如果数据库中有任何4字节字符,它们将被破坏。
最后,对于使用流行的WP Migrate DB PRO插件的任何人,a user in this Wordpress.org thread报告说迁移总是处理得当但我无法找到任何正式的。
WP Migrate DB插件将数据库从一个排序规则转换为另一个排序规则,当它在5.5.3之前或之后的主机之间移动4.2个站点时
目前,似乎没有办法退出数据库更新。因此,如果您正在使用工作流将服务器或本地主机(使用MySQL> 5.5.3)迁移到使用较旧MySQL版本的工作流,则可能会运气不佳。
在我的情况下,事实证明我的
新服务器正在运行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
文件。
wp-config.php中有一行:
define('DB_CHARSET', 'utf8mb4');
如果您遵循Markouver's / Evster's说明,请不要忘记将生产服务器上的此行更改为
define('DB_CHARSET', 'utf8');
为了修复损坏的4字节字符
经过长时间的研究,我找到了上述解决方案:
然后你就开始了。
好像您的主机没有提供能够使用utf8mb4排序规则运行表的MySQL版本。
WordPress表更改为utf8mb4版本4.2(2015年4月23日发布)以支持Emojis,但you need MySQL 5.5.3 to use it. 5.5.3。从2010年3月开始,通常应广泛使用。 Cna你检查你的托管服务商是否提供该版本?
如果没有,并且无法升级,您可能需要注意另一个主机运行最新的WordPress版本(出于安全原因,您应该始终这样做)。