2017-03-07 154 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'。你提到了“截断” - 这也在链接中讨论。 –

相关问题