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

问题描述 投票:46回答:8

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

mysql sql character-encoding utf8mb4
8个回答
64
投票

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

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

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

utf8mb4是utf8的超集

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


27
投票

你可以试试:

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

utf8mb4 to utf8

再次导入。


7
投票

这有助于:

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

PHPMyAdmin在'expert'导出选项中具有相同的MySQL兼容模式。虽然这有时无所作为。

如果您没有通过命令行或PHPMyAdmin访问,那么编辑

/*!50003 SET character_set_client  = utf8mb4 */ ; 

有点读'utf8',是要走的路。


2
投票

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


1
投票

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


该错误清楚地表明您的stage数据库服务器上没有utf8mb4支持。

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

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

由于MySQL的utf8mb4字符集中的错误,添加了utf8。 MySQL对utf8字符集的处理仅允许单个代码点最多3个字节,这不足以代表整个Unicode(Maximum codepoint = 0x10FFFF)。因为他们不想破坏任何依赖这种错误行为的东西,所以添加了utf8mb4Documentation 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,然后导出数据 - 它将加载正常。


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

0
投票

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

/ *!40101 SET NAMES utf8mb4 * /;

更改

/ *!40101 SET NAMES utf8 * /;

保存并上传您的mysql。


0
投票

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

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

完成!

© www.soinside.com 2019 - 2024. All rights reserved.