我有一个旧的数据库,里面有latin1_swedish_ci整理的有价值数据。我现在正试图将其转换为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截断到Bala
然后我尝试使用此
转换数据库 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 :(得分:1)
有多种方法可以转换/修复/ etc字符集。你采取了错误的方式。
ALTER TABLE ... CONVERT TO ...
是将正确编码的表从一种编码更改为另一种编码的最短技术。
相反,如果你有&#34;双重编码&#34;在列中,还需要其他东西。
š
的十六进制是
9A in latin1
C5A1 in utf8
C385C2A1 if "double-encoded"