ERROR 1115(42000):未知字符集:'utf8mb4'

时间:2014-02-20 15:08:52

标签: mysql sql character-encoding utf8mb4

我有一个MySQL转储,我试图通过以下方式恢复:

mysql -u"username" -p"password" --host="127.0.0.1" mysql_db < mysql_db

然而,这引发了一个错误:

ERROR 1115 (42000) at line 3231: Unknown character set: 'utf8mb4'

这是第3231-3233行:

/*!50003 SET character_set_client  = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;

我正在使用MySQL 5.1.69。我该如何解决这个错误?

8 个答案:

答案 0 :(得分:64)

您的版本不支持该字符集,我相信它是引入它的5.5.3。您应该将mysql升级到用于导出此文件的版本。

错误很明显:你在代码中设置了一个特定的字符集,但你的mysql版本不支持它,因此不知道它。

根据https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

  

utf8mb4是utf8的超集

所以也许你有可能只是把它变成utf8,闭上你的眼睛和希望,但这取决于你的数据,我不推荐它。

答案 1 :(得分:28)

您可以尝试:

通过文本编辑器打开sql文件查找并替换所有

utf8mb4 to utf8

再次导入。

答案 2 :(得分:7)

这可以提供帮助:

mysqldump --compatible=mysql40 -u user -p DB > dumpfile.sql

PHPMyAdmin在&#39;专家&#39;中具有相同的MySQL兼容模式。出口选择。虽然这有时没有做任何事情。

如果您无法通过命令行或PHPMyAdmin进行访问,则可以编辑

/*!50003 SET character_set_client  = utf8mb4 */ ; 

仅读取'utf8',是可行的方法。

答案 3 :(得分:2)

用文本编辑器打开你的sql文件并搜索'utf8mb4'并替换为utf8.I希望它对你有用

答案 4 :(得分:1)

我正在回答这个问题 - 因为我没有找到任何完整的问题。如今未知字符集:'utf8mb4'非常普遍,因为许多部署的MySQL不到5.5.3(添加了utf8mb4的版本)。

错误明确指出您的舞台数据库服务器上没有utf8mb4支持。

原因:可能是本地你有MySQL版本5.5.3或更高版本,而在舞台/托管的VPS上你有MySQL服务器版本低于5.5.3

在MySQL 5.5.3中添加了utf8mb4个字符集。

  由于MySQL utf8mb4字符集中存在错误,因此添加了

utf8。   MySQL对utf8字符集的处理只允许最多3个   单个代码点的字节数,不足以代表   整个Unicode(最大代码点= 0x10FFFF)。因为他们   不想破坏任何依赖这辆车的东西   行为,utf8mb4已添加。 Documentation here

来自SO answer

<强>验证: 要验证您是否可以检查要从 - How do I see what character set a MySQL database / table / column is导入转储的数据库的当前字符集和排序规则?

解决方案1 ​​:只需将您的MySQL服务器升级到5.5.3(至少) - 下次有意识到您在本地使用的版本,对于舞台,对于prod,所有必须有是一样的建议 - 目前默认字符集应为utf8mb4。

解决方案 2(不推荐):将当前字符集转换为utf8,然后导出数据 - 它将加载正常。

答案 5 :(得分:0)

也许整个数据库+表+字段应该有相同的字符集??!

CREATE TABLE `politicas` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Nombre` varchar(250) CHARACTER SET utf8 NOT NULL,
  -------------------------------------^here!!!!!!!!!!!
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
  -------------------------------------------------^here!!!!!!!!!

答案 6 :(得分:0)

使用任何编辑工具打开mysql文件

找到

  

/ *!40101设置名称utf8mb4 * /;

更改

  

/ *!40101设置名称utf8 * /;

保存并上传您的mysql。

答案 7 :(得分:0)

如此处建议的那样,将uft8md4替换为utf8将有助于您解决问题。恕我直言,我使用sed查找并替换了它们以避免丢失数据。此外,在任何图形编辑器中打开大文件都是潜在的麻烦。我的MySQL数据增长了2 GB。最终命令是

  

sed's / utf8mb4_unicode_520_ci / utf8_unicode_ci / g'   原始mysql-data.sql>更新的mysql-data.sql
  sed   's / utf8mb4 / utf8 / g'original-mysql-data.sql>更新-mysql-data.sql

完成!