如何将mysql格式latin1中的旧数据库转换为utf8

时间:2012-08-08 11:03:18

标签: mysql database utf-8 latin1

我有一个latin1格式的数据库,所有存储的utf8字符都显示为????

 +------+---------+-------+---------+--------------------+----------+--------------------      -----+---------------------+---------------------+---------+
 | id   | user_id | fname | lname   | designation        | location | email                    | created_at          | updated_at          | country |
 +------+---------+-------+---------+--------------------+----------+------------------------- +---------------------+---------------------+---------+
 | 6035 |    6035 | ????? | ??????? | ???????? ????????? |          |  ccc@rddd.net            | 2011-04-11 06:05:54 | 2011-04-10 06:13:04 | xxxxxxxxx |
 +------+---------+-------+---------+--------------------+----------+-------------------------+---------------------+---------------------+---------+

现在我使用此命令并将数据库和表格的格式更改为utf8

  ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8;

  ALTER DATABASE <database_name> CHARACTER SET utf8;

我已经读过latin1为每个字符使用1byte但是utf8对每个字符使用3bytes。我的问题是如果我改变我的表(已经包含大量数据)从latin1到utf8,旧字符数据将消耗3bytes或1byte。如果我使用alter并转换数据,我会对旧数据有问题吗?我确信新数据将在utf8中。

1 个答案:

答案 0 :(得分:0)

首先,你应该尝试:

SET NAMES 'utf8'
SET CHARACTER SET utf8

并选择您的行#6085,以验证记录的数据是否未损坏并以UTF8格式编码。

UTF8(与UTF16不同),为了向后兼容,对ASCII字符使用1个字节。它最多使用4个字节用于其他字符(unicode faq)。

如果数据已经以UTF8格式存储,则不应对其进行转换。


警告

  1. 在备份中尝试使用ALTER TABLE。
  2. ALTER TABLE锁定您的数据库。