我有一个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在'expert'导出选项中具有相同的MySQL兼容模式。虽然这有时无所作为。
如果您没有通过命令行或PHPMyAdmin访问,那么编辑
/*!50003 SET character_set_client = utf8mb4 */ ;
有点读'utf8'
,是要走的路。
只需用文本编辑器打开你的sql文件,然后搜索'utf8mb4'并替换为utf8.I希望它对你有用
我正在回答这个问题 - 因为我没有找到任何完整的问题。正如现在的未知字符集:'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
)。因为他们不想破坏任何依赖这种错误行为的东西,所以添加了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,然后导出数据 - 它将加载正常。
也许整个数据库+表+字段应该有相同的字符集??!
即
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!!!!!!!!!
打开你的mysql文件任何编辑工具
找
/ *!40101 SET NAMES utf8mb4 * /;
更改
/ *!40101 SET NAMES utf8 * /;
保存并上传您的mysql。
正如一些人在这里建议的那样,用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
完成!