我有一个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中。
答案 0 :(得分:0)
首先,你应该尝试:
SET NAMES 'utf8'
SET CHARACTER SET utf8
并选择您的行#6085,以验证记录的数据是否未损坏并以UTF8格式编码。
UTF8(与UTF16不同),为了向后兼容,对ASCII字符使用1个字节。它最多使用4个字节用于其他字符(unicode faq)。
如果数据已经以UTF8格式存储,则不应对其进行转换。
警告