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

fkaflof6  于 2023-04-28  发布在  Mysql
关注(0)|答案(9)|浏览(484)

我有一个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.如何解决此错误?

guicsvcw

guicsvcw1#

您的版本不支持该字符集,我相信它是5.5.3引入的。你应该升级你的mysql到你用来导出这个文件的版本。
错误就很明显了:你在代码中设置了一个特定的字符集,但是你的mysql版本不支持它,因此你不知道它。
根据https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
utf8mb4是utf8的超集
所以也许有一个机会,你可以让它utf8,闭上你的眼睛和希望,但这将取决于你的数据,我不建议它。

fd3cxomn

fd3cxomn2#

您可以尝试:
通过文本编辑器打开sql文件查找并全部替换

utf8mb4 to utf8

再次导入。

ix0qys7i

ix0qys7i3#

这可以帮助:

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

PHPMyAdmin在'expert'导出选项中具有相同的MySQL兼容性模式。尽管有时候这并没有起到什么作用。
如果您没有通过命令行或PHPMyAdmin访问权限,则编辑

/*!50003 SET character_set_client  = utf8mb4 */ ;

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

krcsximq

krcsximq4#

我在回答这个问题-因为我没有发现任何一个完整的。目前**未知字符集:'utf8 mb 4'**非常普遍,因为许多部署的MySQL少于5。5.3(添加utf8 mb 4的版本)。
该错误明确指出您的stage db服务器上不支持utf8mb4

原因:您本地可能有MySQL版本5。5.3或更高版本,并且在舞台/托管VPS上,您的MySQL服务器版本小于5。5.3

utf8mb4字符集在MySQL 5中添加。5.3.
添加utf8mb4是因为MySQL的utf8字符集有一个错误。MySQL对utf8字符集的处理只允许单个代码点最多3个字节,这不足以代表整个Unicode(Maximum codepoint = 0x10FFFF)。因为他们不想破坏任何依赖于这种错误行为的东西,所以添加了utf8mb4Documentation here
来自SO回答:

验证:为了验证,您可以检查您正在导入转储的数据库的当前字符集和排序规则-我如何查看MySQL数据库/表/列是什么字符集?
方案一:只需将MySQL服务器升级到5。5.3(至少)-下次请注意您在本地使用的版本,用于舞台和prod,所有版本必须相同。一个建议-在目前的默认字符集应该是utf8 mb 4。
方案2(不推荐):将当前字符集转换为utf8,然后导出数据-它将加载OK。

tct7dpnv

tct7dpnv5#

只要用文本编辑器打开你的sql文件,搜索'utf8mb4',然后替换为utf8。我希望这对你有用

yhuiod9q

yhuiod9q6#

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

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

bcs8qyzn7#

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

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

成交!

aoyhnmkz

aoyhnmkz8#

如果您不能升级服务器,我可以通过将客户端的ODBC连接器降级到5来消 debugging 误。3.8

jutyujz0

jutyujz09#

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

发现
/*!40101 SET NAMES utf8mb4 /;
变化
/
!40101设置名称utf8 */;
保存并上传您的mysql。

相关问题