如何修复双重编码的UTF8字符(在utf-8表中)
之前的LOAD DATA INFILE
是在假定CSV文件是latin1
编码的情况下运行的。 在此导入期间,多字节字符被解释为两个单字符,然后使用utf-8(再次)进行编码。
这种双重编码造成的exception像ñ
而不是ñ
。
如何纠正这些string?
以下MySQL函数将在双重编码后返回正确的utf8string:
CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)
它可以与UPDATE
语句一起使用来更正字段:
UPDATE tablename SET field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
上面的答案适用于我的一些数据,但运行后导致了很多NULL列。 我的想法是,如果转换不成功,则返回null。 为了避免这一点,我添加了一个小检查。
UPDATE tbl SET col = CASE WHEN CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) IS NULL THEN col ELSE CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) END