2014-02-20 139 views
35

我有一個MySQL轉儲,我試圖與恢復:ERROR 1115(42000):未知字符集: 'utf8mb4'

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

你必須看着你與文本編輯器轉儲,看看什麼是損壞的。你會看到什麼是探針,如果你能恢復。第3231行(及其周圍)的代碼是什麼? –

+0

從哪個版本的mysql轉儲?你將它恢復到不同的主機或不同的版本,或兩者,對吧? – Alexander

+0

是亞歷山大我正在嘗試恢復另一個主機轉儲。我不知道版本。要恢復哪個版本的 – saravanakumar

回答

51

您的版本不支持該字符集,我相信它是5.5.3引入它。你應該將你的mysql升級到你用來導出這個文件的版本。

錯誤很明顯:你在你的代碼中設置了一個特定的字符集,但你的mysql版本不支持它,因此不知道它。

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

utf8mb4 is a superset of utf8

所以也許有機會的話,你可以只讓UTF8,閉上你的眼睛和希望,但是這將取決於你的數據,我不推薦它。

+15

只需將utf8mb4更改爲utf8.It工作正常。謝謝@Nanne :-) – saravanakumar

+0

肯定不**在我的情況下工作,只是改變爲UTF8 - 結束了時髦/垃圾字符。 –

+1

好吧,顯然可能是這種情況 - >你明顯的解決辦法是將你的數據從utf8mb4重新編碼到你的數據庫支持的東西或者將你的數據庫更新到支持你的數據集的版本。 – Nanne

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

我已經解決了這個問題,謝謝你的回答。這可能對其他人有幫助。 – saravanakumar

1

你的MySQL是過時的。

解決問題的最簡單方法是:通過SSH運行此命令行。

yum -y update 

重新啓動您的MySQL服務或更好地重新啓動您的VPS。

+1

請注意,這會更新所有yum軟件包,並且在執行之前不會要求您確認。 – tombeynon

+0

繼續並更新您無權訪問的所有共享宿主服務器。 – WooDzu

+0

downvoted因爲這個邏輯,爲什麼不繼續和rm -rf/ – w00t

6

這可以幫助:

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

的phpMyAdmin已在 '專家' 導出選項同MySQL的兼容模式。儘管有時無所作爲。

如果沒有通過命令行或通過的phpMyAdmin訪問,則編輯

/*!50003 SET character_set_client = utf8mb4 */ ; 

位閱讀'utf8'只,是要走的路。

1

只要打開你的SQL文件使用文本編輯器和搜索「utf8mb4」,代之以utf8.I希望它會爲你工作

19

你可以試試:

用文本編輯器打開SQL文件中找到並全部替換

utf8mb4 to utf8 

再次導入。

+0

爲我工作。我的MySQL也被更新了。 – UserYmY

1

我在回答這個問題 - 因爲我沒有找到任何完整的答案。如今如今未知字符集:'utf8mb4'非常流行,因爲大量的部署有MySQL小於5.5.3(添加了utf8mb4的版本)。


的錯誤清楚地表明你沒有支持你的舞臺數據庫服務器上utf8mb4

原因:是在本地的你有5.5.3或更高版本MySQL,並在舞臺上/託管VPS必須小於5.5.3

在MySQL 5.5中添加的utf8mb4字符集的MySQL服務器版本。 3。

utf8mb4 was added because of a bug in MySQL's utf8 character set. MySQL's handling of the utf8 character set only allows a maximum of 3 bytes for a single codepoint, which isn't enough to represent the entirety of Unicode (Maximum codepoint = 0x10FFFF). Because they didn't want to potentially break any stuff that relied on this buggy behaviour, utf8mb4 was added. Documentation here .

SO answer


驗證: 要驗證您可以檢查數據庫的當前字符集和校對你想導入轉儲 - How do I see what character set a MySQL database/table/column is


解決方案1 ​​:你的MySQL服務器只需升級到5.5.3(AT-至少) - 爲下一次意識到你在本地使用的版本,舞臺,並督促,都必須有相同。一個建議 - 在目前的默認字符集應該是utf8mb4。

解決方案 2(不推薦):將當前字符集轉換爲utf8,然後導出數據 - 它會加載好。