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

Posted

技术标签:

【中文标题】错误 1115 (42000):未知字符集:\'utf8mb4\'【英文标题】:ERROR 1115 (42000): Unknown character set: 'utf8mb4'错误 1115 (42000):未知字符集:'utf8mb4' 【发布时间】:2014-03-21 15:04:06 【问题描述】:

我有一个 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。我该如何解决这个错误?

【问题讨论】:

您必须使用文本编辑器查看转储文件以查看损坏的内容。您将看到问题是什么以及是否可以恢复。第 3231 行(及其周围)的代码是什么? 你的转储来自哪个版本的mysql?您将其还原到不同的主机或不同的版本,或两者兼而有之,对吗? 是的 Alexander 我正在尝试恢复另一个主机转储。我不知道版本。 要恢复到哪个版本?尝试安装最新的。 使用版本 - 5.1.69 【参考方案1】:

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

那么错误就很清楚了:你在代码中设置了某个字符集,但是你的mysql版本不支持它,因此不知道它。

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

utf8mb4 是 utf8 的超集

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

【讨论】:

只需将 utf8mb4 更改为 utf8。它工作正常。谢谢@Nanne :-) 在我的情况下,not 确实可以简单地更改为 utf8 - 最终以时髦/垃圾字符结束。 好吧,显然情况可能是这样 -> 您明显的解决方案是将您的数据从 utf8mb4 重新编码为您的数据库支持的内容,或者将您的数据库更新为支持您的数据集的版本。跨度> 是的,在我的情况下,在 localhost 中,对于旧 wamp,它在更改时可以工作:utf8mb4utf8 编辑文件并再次导入到 mysql【参考方案2】:

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

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

【讨论】:

我已经解决了这个问题,谢谢你的回答。这可能对其他人有所帮助。【参考方案3】:

这会有所帮助:

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

phpMyAdmin 在“专家”导出选项中具有相同的 MySQL 兼容模式。虽然这有时什么也没做。

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

/*!50003 SET character_set_client  = utf8mb4 */ ; 

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

【讨论】:

【参考方案4】:

只需使用文本编辑器打开您的 sql 文件并搜索“utf8mb4”并替换为 utf8。我希望它对您有用

【讨论】:

非常糟糕的解决方案,因为您可能会丢失一些数据。【参考方案5】:

你可以试试:

用文本编辑器打开sql文件查找并全部替换

utf8mb4 to utf8

再次导入。

【讨论】:

这是 linux 命令:sed -i 's/utf8mb4/utf8/g' dump.sql【参考方案6】:

我正在回答这个问题 - 因为我没有发现其中任何一个是完整的。现在 Unknown character set: 'utf8mb4' 非常普遍,因为许多部署的 MySQL 低于 5.5.3(添加了 utf8mb4 的版本)。


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

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

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

utf8mb4 是由于 MySQL 的 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(至少)- 下次请注意您在本地使用的版本,对于 stage 和 prod,都必须有一样。一个建议 - 目前默认字符集应该是 utf8mb4。

解决方案 2(不推荐):将当前字符集转成utf8,然后导出数据,就可以正常加载了。

【讨论】:

【参考方案7】:

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

找到

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

改变

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

保存并上传你的mysql。

【讨论】:

【参考方案8】:

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

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

完成!

【讨论】:

以上是关于错误 1115 (42000):未知字符集:'utf8mb4'的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1064 默认字符集 utf8 在第 1 行整理 utf8_unicode_ci' [重复]

MariaDB 未知语法错误。制作一个简单的表格[重复]

iOS 正则表达式:未知转义序列“\|”

MySQL:错误 1142 (42000) 和错误 1064 (42000)

尝试将 mysql 模型中的表与我的数据库同步,我收到此错误

将ut8转换为字符串