2

我有一列使用 latin1 字符编码。谁能解释为什么会这样?

当我运行时:

SET NAMES utf8;
SELECT unhex(convert(hex(text) USING utf8)) FROM translation_target

我可以正确显示字符。

当我运行时:

SET NAMES utf8;
SELECT text FROM sanus2013_dev1.translation_target;

我得到了损坏的字符:

所以我想如果我运行这样的东西:

UPDATE translation_target SET text = unhex(convert(hex(text) USING utf8));

我将能够使用:

SET NAMES utf8;
SELECT text FROM sanus2013_dev1.translation_target;

并查看正确的字符编码。谁能解释为什么这不起作用?

编辑:专栏translation_targetCHARACTER SET latin1COLLATE latin1_swedish_ci

不确定这是否有帮助,但我使用 ALTER TABLE COLUMN 语句将 CHARACTER SET 更改为 utf8 并将 COLLATION 更改为 utf8_unicode_ci;

跑步:

SET NAMES utf8;
SELECT unhex(convert(hex(text) USING utf8)) FROM translation_target;

显示损坏的字符。

当我将字符集和排序规则更改回 latin1 时,它再次起作用。

4

1 回答 1

0

尝试使用这个:

UPDATE translation_target 
    SET text=convert(cast(convert(text using  latin1) as binary) using utf8) 
    FROM translation_target; 
于 2016-07-20T19:42:52.007 回答