我有一个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。我该如何解决这个错误?
答案 0 :(得分:64)
您的版本不支持该字符集,我相信它是引入它的5.5.3
。您应该将mysql升级到用于导出此文件的版本。
错误很明显:你在代码中设置了一个特定的字符集,但你的mysql版本不支持它,因此不知道它。
根据https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html:
utf8mb4是utf8的超集
所以也许你有可能只是把它变成utf8,闭上你的眼睛和希望,但这取决于你的数据,我不推荐它。
答案 1 :(得分:28)
您可以尝试:
通过文本编辑器打开sql文件查找并替换所有
utf8mb4 to utf8
再次导入。
答案 2 :(得分:7)
这可以提供帮助:
mysqldump --compatible=mysql40 -u user -p DB > dumpfile.sql
PHPMyAdmin在&#39;专家&#39;中具有相同的MySQL兼容模式。出口选择。虽然这有时没有做任何事情。
如果您无法通过命令行或PHPMyAdmin进行访问,则可以编辑
/*!50003 SET character_set_client = utf8mb4 */ ;
仅读取'utf8'
,是可行的方法。
答案 3 :(得分:2)
用文本编辑器打开你的sql文件并搜索'utf8mb4'并替换为utf8.I希望它对你有用
答案 4 :(得分:1)
我正在回答这个问题 - 因为我没有找到任何完整的问题。如今未知字符集:'utf8mb4'非常普遍,因为许多部署的MySQL不到5.5.3(添加了utf8mb4的版本)。
错误明确指出您的舞台数据库服务器上没有utf8mb4
支持。
原因:可能是本地你有MySQL
版本5.5.3或更高版本,而在舞台/托管的VPS上你有MySQL服务器版本低于5.5.3
在MySQL 5.5.3中添加了utf8mb4
个字符集。
由于MySQLutf8mb4
字符集中存在错误,因此添加了
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(至少) - 下次有意识到您在本地使用的版本,对于舞台,对于prod,所有必须有是一样的建议 - 目前默认字符集应为utf8mb4。
解决方案 2(不推荐):将当前字符集转换为utf8,然后导出数据 - 它将加载正常。
答案 5 :(得分: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!!!!!!!!!
答案 6 :(得分:0)
使用任何编辑工具打开mysql文件
找到
/ *!40101设置名称utf8mb4 * /;
更改
/ *!40101设置名称utf8 * /;
保存并上传您的mysql。
答案 7 :(得分:0)
如此处建议的那样,将uft8md4
替换为utf8
将有助于您解决问题。恕我直言,我使用sed
查找并替换了它们以避免丢失数据。此外,在任何图形编辑器中打开大文件都是潜在的麻烦。我的MySQL数据增长了2 GB。最终命令是
sed's / utf8mb4_unicode_520_ci / utf8_unicode_ci / g' 原始mysql-data.sql>更新的mysql-data.sql
sed 's / utf8mb4 / utf8 / g'original-mysql-data.sql>更新-mysql-data.sql
完成!