2017-03-07 138 views
1

我使用latin1_swedish_ci歸類中的有價值數據創建舊數據庫。我現在試圖將其轉換爲utf8,但我有問題。將數據從latin1轉換爲utf8後截斷數據

我已經嘗試了一切,並閱讀了我發現的每篇文章。我有幾個數據庫,其中一些技術對某些數據庫是有效的,但不是這一個。

首先,我想這一點,其中不同的數據庫

UPDATE tt_news SET 
    title=convert(cast(convert(title using latin1) as binary) using utf8), 
    short=convert(cast(convert(short using latin1) as binary) using utf8), 
    bodytext=convert(cast(convert(bodytext using latin1) as binary) using utf8) 
WHERE 1 

上工作,它被截斷從Balaševiæevi我的數據巴拉

然後我試圖用這個

mysqldump -u root -p mydb -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B mydb > dump.sql 

sed 's/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/' <dump.sql | sed 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/' >dump-fixed.sql 

mysql -u root -p mydb < dump-fixed.sql 
轉換數據庫

所有內容都轉換爲utf8_general_ci,並且數據不會被截斷,但我仍然遇到問題,因爲字符不會顯示爲應該顯示的內容。

回答

0

轉換/修復/ etc字符集有多種方法。你選錯了路。

ALTER TABLE ... CONVERT TO ... 

是從一個編碼改變正確編碼表到另一最短技術。

Reference

相反,如果你在列有「雙編碼」,別的東西是必要的。

十六進制爲š

9A in latin1 
C5A1 in utf8 
C385C2A1 if "double-encoded" 

More discussion

+0

這是字處理>Kuæa,這是六角形> 4B75C3A661,這是二進制> 4b75c3a661。該怎麼辦? – emir

+0

應該有Kuća – emir

+0

Kuæa和4B75C3A661和4b75c3a661是一致的utf8。 (十六進制的大小寫不是必然的。)Kuća的Utf8 hex是'4B75C48761'。你提到了「截斷」 - 這也在鏈接中討論。 –

相關問題