#1273-未知归类:'utf8mb4_unicode_ci'cPanel


183

我的本地计算机上有一个WordPress数据库,我想将其转移到cPanel上的托管phpMyAdmin。但是,当我尝试将数据库导入到环境中时,我不断收到此错误:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

我已经尝试使用Google,但唯一可以找到的解决方案是此phpmysql错误-#1273-#1273-未知归类:'utf8mb4_general_ci'到目前为止,它并没有太大帮助。我曾尝试清除Cookie,但仍然无法正常工作。请帮忙!


Answers:


107

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

?>

47
这似乎mysqldump --compatible=mysql4
有点

2
对我来说,它奏效了。切记为文件命名db-convert.php
Fred K

1
如果您将“ localhost”作为输入,那就太完美了。
br4nnigan

2
mysqldump --compatible=mysql4或者下面的答案是一个更好的选择。我认为在实时站点上更改此类内容不是一个明智的主意。最好以正确的格式导出,否则,请编辑导出的文件。
Tisch 2016年

所以你只是救了我的命,我所能给你的只有+1。
Taruc

229

这篇文章中的技术对我有用

1)单击数据库的“导出”选项卡

2)点击“自定义”单选按钮

3)转至标题为“特定于格式的选项”的部分,并将“数据库系统或旧版MySQL服务器以最大程度地提高与以下对象的输出兼容性”的下拉列表从NONE更改为MYSQL40。

4)滚动到底部,然后单击“开始”。

我不确定这样做是否会导致任何数据丢失,但是在我尝试过的一次中,我没有发现任何数据丢失。在与以上链接的论坛中进行答复的人也没有。

编辑16年8月12日 -我相信以这种方式导出数据库会使我丢失保存在Black Studio TinyMCE Visual Editor窗口小部件中的数据,尽管我还没有运行多个测试来确认。


不适用于我,我收到错误#
1231-

在尝试其他解决方案多次失败之后,该解决方案在第一次尝试中就完美地工作了。
Vincent Polisi 2016年

不适用于某些新的Wordpress网站。在另一台服务器上导入它时,它将在它尝试导入的第一个表上生成此错误(wp_commentmeta)#1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第19行的'TYPE = MyISAM AUTO_INCREMENT = 1'附近使用
that-ben

这似乎对我没有任何影响,仍然收到相同的错误消息
pealo86

你是老板
Aseel Ashraf

159

如果您已经导出了.sql文件,那么最好的办法是在文件中包含以下内容后查找并替换以下内容:

  • utf8mb4_0900_ai_ciutf8_unicode_ci
  • utf8mb4utf8
  • utf8_unicode_520_ciutf8_unicode_ci

它将替换utf8mb4_unicode_ciutf8_unicode_ci。现在,您进入phpMyAdmin cPanel并utf8_unicode_ci通过Operations> Collat​​ion设置数据库排序规则为

如果要导出到.sql,最好更改导出文件的格式。查看Evster的答案(与该页面位于同一页面)



对于所有Unix伙伴:sed -i.bak s/utf8mb4/utf8/g FILE_NAME。这将utf8mb4在FILE_NAME中找到所有匹配项,并将其替换为,utf8同时将原始文件的副本保存到FILE_NAME.bak。您可能需要对其进行调整以指定确切的联盟,但这只是一个开始:)
DaveLak

1
我还必须将utf8_unicode_520_ci替换为:utf8_unicode_ci
Nick Rivers

或通过vi:vi dump.sql然后在via中执行以下操作::%s/uf8mb4/utf8/g
ValentinGrégoire'18

2
并替换utf8_0900_ai_ciutf8_unicode_ci
Irfan Yusanif

44

我在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 -u yourdBUser -p yourdBPasswd yourdB < your_file.sql

1
关于另一个答案有一个评论,这里需要重复。sed的OS X版本在-i标志之后需要一个额外的参数。这样sed -i '' ....工作。
肯特

2
我也必须执行此操作:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays

28

出于安全考虑,Wordpress 4.2引入了对“ 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插件的任何人,该Wordpress.org线程中的用户都报告迁移始终得到正确处理,但我找不到任何官方文件。

WP Migrate DB插件在使用5.5.3之前或之后的MySQL在主机之间移动4.2站点时将数据库从一种排序规则转换为另一种排序规则

目前,似乎没有选择退出数据库更新的方法。因此,如果您使用的工作流程是将站点从MySQL或5.5.3以上的服务器或本地主机迁移到使用旧版MySQL的站点,则可能会不走运。


将兼容性更改为“ MYSQL 40”对我完全有用。
Keryn Gill 2015年

3
如果然后尝试将兼容mysql4的转储导入到v5.5.3后的数据库中(我使用的是5.5.28),则该操作将失败,因为该脚本包括TYPE=MyISAM在v5.1中删除的脚本。搜索并替换为ENGINE=MyISAM。我看不到使用mysqldump输出选项解决此问题的方法。
icc97

26

就我而言,事实证明我的
新服务器正在运行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文件。


1
是的-上传到5.6是最简单的解决方案(Ubuntu有一个mysql-server-5.6可以安装的软件包,它将自动为您删除5.5)。
威廉·特雷尔

15

wp-config.php中有一行:

define('DB_CHARSET', 'utf8mb4');

如果您遵循Markouver / Evster的说明,请不要忘记将生产服务器上的这一行更改为

define('DB_CHARSET', 'utf8');

为了修复损坏的4字节字符


1
同样不要忘记修改define('DB_COLLATE', 'utf8_general_ci');。这对我有帮助。
Abduhafiz

10

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

  1. 首先,将wp-config.php>数据库DB_CHARSET更改为“ utf8”

  2. 单击数据库的“导出”选项卡

  3. 点击“自定义”单选按钮

  4. 转至标题为“特定于格式的选项”的部分,并将“数据库系统或较旧的MySQL服务器以最大程度地提高与:的输出兼容性”的下拉列表从NONE更改为MYSQL40。

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

然后您就可以了。


7

似乎您的主机未提供能够以utf8mb4排序规则运行表的MySQL版本。

WordPress表已更改为utf8mb4,版本为4.2(于2015年4月23日发布)以支持Emojis,但您需要MySQL 5.5.3才能使用它。5.5.3。是从2010年3月开始的,因此通常应该可以广泛使用。CNA,您检查托管服务商是否提供该版本?

如果没有,并且无法升级,您可能必须寻找其他托管商来运行最新的WordPress版本(出于安全原因,您应该始终这样做)。


1
您可以通过命令行使用“ mysql -V”检查您的MySQL版本
Edd Smith

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

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

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


1
请注意,如果您使用的是OS X的sed版本:$ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql。如果您想像database_name.sql.baksed之前一样保留副本,请替换:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
贾斯汀·福尔蒂

您也可以内联sed
davidbitton

另外,如果您在MySQL 8上运行mysqldump,则需要使用--compatible=ansi选项
AbstractVoid19


1

最简单的方法是将数据库导出到.sql,在Notepad ++上将其打开,然后“搜索并替换” utf8mb4_unicode_ciutf8_unicode_ci并替换utf8mb4utf8。同样不要忘记将数据库排序utf8_unicode_ci规则更改为(操作>排序规则)。


0

在Notepad ++上打开sql文件,ctrl + H. 然后将“ utf8mb4”放在搜索上,将“ utf8”放在替换上。然后将解决此问题。


它说“未知整理utf8”
CristianTraìna18年6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.