63

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

4

8 回答 8

78

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

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

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

utf8mb4 是 utf8 的超集

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

于 2014-02-21T08:40:54.603 回答
30

你可以试试:

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

utf8mb4 to utf8

再次导入。

于 2016-07-08T05:48:56.707 回答
9

这可以帮助:

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

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

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

/*!50003 SET character_set_client  = utf8mb4 */ ; 

位只读'utf8',是要走的路。

于 2016-01-29T06:51:58.860 回答
2

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

于 2016-03-28T18:52:10.660 回答
2

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


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

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

MySQL 5.5.3 中添加了utf8mb4字符集。

utf8mb4由于 MySQLutf8字符集中的错误而添加。MySQL 对 utf8 字符集的处理只允许单个 codepoint 最多 3 个字节,这不足以代表整个 Unicode (Maximum codepoint = 0x10FFFF)。因为他们不想潜在地破坏任何依赖这种错误行为的东西,所以utf8mb4添加了。文档在这里

SO 答案


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


解决方案 1:只需将您的 MySQL 服务器升级到 5.5.3(至少) - 下次请注意您在本地使用的版本,对于 stage 和 prod,都必须相同。一个建议 - 目前默认字符集应该是 utf8mb4。

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

于 2016-08-17T12:54:52.027 回答
1

正如这里的一些建议,替换utf8mb4utf8将帮助您解决问题。恕我直言,我曾经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

完毕!

于 2019-03-15T06:52:45.830 回答
0

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

IE

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!!!!!!!!!
于 2014-06-05T07:45:23.357 回答
-1

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

寻找

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

改变

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

保存并上传你的mysql。

于 2018-09-12T16:48:35.053 回答