0

我的数据库中有超过 1k 条记录,其值看起来很奇怪:

Lưu Bích vỠViệt Nam làm liveshow

但是,当我在 utf-8 中查看它们时,它看起来很好且可读。我如何立即将所有这些转换为在 mysql 中看起来像这样的 ut8:

Lưu Bích về Việt Nam làm liveshow

非常感谢任何形式的帮助。谢谢!

4

1 回答 1

1

我将假设列编码是 utf8。如果不是,请更改它,因为 latin1 没有 Việt 所需的字符。

此时,您在列中拥有的是双重 UTF-8 编码的文本。如果所有文本都以同样的方式被破坏,您可以通过将列类型首先更改为 latin1 文本,然后更改为 blob,然后更改为 utf8 文本来解决此问题。但是,如果列中的某些数据是单独编码的,则您需要检测损坏的值并仅更新这些值。此更新语句试图做到这一点:

update mytable set mycolumn = @txt where char_length(mycolumn) = 
    length(@txt := convert(binary convert(mycolumn using latin1) using utf8));

或者,您可以定义一个执行“安全” utf-8 转换的函数,检测原始数据何时正常并仅在不正常时返回转换后的版本,然后使用它进行更新。

于 2012-08-03T12:44:00.603 回答