簡體   English   中英

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

[英]ERROR 1115 (42000): Unknown character set: 'utf8mb4'

我有一個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的utf8字符集中存在錯誤,因此添加了utf8mb4 MySQL對utf8字符集的處理僅允許單個代碼點最多3個字節,這不足以表示整個Unicode(最大代碼點= 0x10FFFF )。 因為他們不想破壞任何依賴這種錯誤行為的東西, utf8mb4添加了utf8mb4 文檔在這里

SO回答


驗證 :要驗證您是否可以檢查要導入轉儲的數據庫的當前字符集和排序規則 - 如何查看MySQL數據庫/表/列的字符集是什么?


解決方案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。

正如一些人建議的那樣,用utf8替換utf8mb4將幫助您解決問題。 恕我直言,我使用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

完成!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM