错误 1115 (42000): 未知字符集: '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。如何解决此错误?

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

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

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

utf8mb4是utf8 的超集

所以也许你有机会把它做成utf8,闭上眼睛,满怀希望,但这取决于你的数据,我不建议这样做。

您可以尝试:

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

utf8mb4 to utf8

再次导入。

这可以帮助:

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

PHPMyAdmin在"专家"导出选项中具有相同的MySQL兼容模式。尽管这有时没有起到任何作用。

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

/*!50003 SET character_set_client  = utf8mb4 */ ; 

仅读取'utf8'的位是要走的路。

我正在回答这个问题,因为我没有发现其中任何一个是完整的。正如现在未知字符集:"utf8mb4">非常普遍,因为许多部署的MySQL都低于5.5.3(添加了utf8mb 4的版本)。


错误清楚地表明您的后台数据库服务器上不支持utf8mb4

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

utf8mb4字符集是在MySQL 5.5.3中添加的。

添加

utf8mb4是因为MySQL的utf8字符集中存在错误。MySQL对utf8字符集的处理最多只允许3个字符字节,这不足以表示Unicode的整体(最大码点=0x10FFFF)。因为他们不想破坏任何依赖这辆车的东西添加了utf8mb4。此处提供文档。

来自SO答案:


验证:为了验证,您可以检查从中导入转储的数据库的当前字符集和排序规则-如何查看MySQL数据库/表/列的字符集?


解决方案1:只需将您的MySQL服务器升级到(至少)5.5.3即可-下次要注意您在本地、阶段和产品中使用的版本,所有版本都必须相同。一个建议-目前默认的字符集应该是utf8mb4。

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

只需用文本编辑器打开您的sql文件,搜索"utf8mb4"并替换为utf8。我希望它能为您工作

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

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!!!!!!!!!

正如这里的一些建议,用utf8替换utf8mb4将帮助您解决问题。IMHO,我使用sed来查找和替换它们,以避免丢失数据。此外,在任何图形编辑器中打开一个大文件都是一种潜在的痛苦。我的MySQL数据增长了2GB。最终命令是

sed 's/utf8mb4_unicode_520_ci/utf8_unicode_ci/g' original-mysql-data.sql > updated-mysql-data.sql
sed 's/utf8mb4/utf8/g' original-mysql-data.sql > updated-mysql-data.sql

完成!

如果你不能升级服务器,我可以通过将客户端的ODBC连接器降级到5.3.8 来消除错误

打开您的mysql文件任何编辑工具

查找

/*!40101集合名称utf8mb4*/;

更改

/*!40101集合名称utf8*/;

保存并上传ur-mysql。

最新更新