【发布时间】:2013-03-21 16:12:25
【问题描述】:
我在 MySql 5 DB 上有一个表。该表包含不是有效 UTF-8 / UTF8 的数据。
字段的数据类型为LONGTEXT。
以下是此类数据的示例:
receiver?àùs
我尝试通过多种方式转换和更改字符集:
ALTER TABLE Table1 CONVERT TO CHARACTER SET utf8;
ALTER TABLE Table1 convert to character set utf8 collate utf8_general_ci;
ALTER TABLE Table1 CHANGE `col1` `col1` LONGTEXT CHARACTER SET utf8;
更改表后,我尝试从包含该数据的另一个表中重新加载它,但它没有改变......它看起来像“receiver?àùs”而不是 UTF 8 字符。
如何转换?
【问题讨论】:
-
列中的所有字符都已编码为 UTF-8。这是数据如何插入表中的问题,表中已经存在的数据通常是无法挽救的,尤其是当您有
?字符时,这意味着信息丢失。当您将数据插入表中时,您需要以与您声称对 mysql 相同的编码对物理字节进行编码。声称的编码是连接编码。物理编码取决于。如果您使用的是 PHP,驱动程序不会强制执行任何物理编码。 -
在将数据推送到数据库之前,我在 php 中使用了 mb_convert_encoding。这对我来说就像魅力
-
我不介意丢失非 UTF-8 数据。我只需要在 MySql 中找到一种将其转换为 UTF-8 的方法。后来我将其导出,当我尝试将其导入到第 3 端程序时,问题就开始了。我想我可以用 php 做点什么,但我宁愿避免它,我有 1,000,000 多条记录。
-
@cjg 您可以正确声明连接编码,而不必这样做...
-
@cjg 如果您不知道文件的编码是什么,您如何转换它们?转换需要解码(
$from部分),如果您不知道在解码中使用什么编码,则无法正确解码。 :P