vbe*_*nce 52 mysql string utf-8 character-encoding
之前LOAD DATA INFILE是在假设CSV文件已latin1编码的情况下运行的.在此导入期间,多字节字符被解释为两个单个字符,然后使用utf-8进行编码(再次).
这种双重编码创造了异常,ñ而不是ñ.
如何纠正这些字符串?
vbe*_*nce 102
以下MySQL函数将在双重编码后返回正确的utf8字符串:
CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)
Run Code Online (Sandbox Code Playgroud)
它可以与UPDATE语句一起使用来更正字段:
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
Run Code Online (Sandbox Code Playgroud)
小智 13
上面的答案适用于我的一些数据,但在运行后产生了很多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
Run Code Online (Sandbox Code Playgroud)
小智 5
使用“utf8mb4”而不是“utf8”非常重要,因为 mysql 会删除无法识别的字符后的所有数据。所以更安全的方法是;
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8mb4);
Run Code Online (Sandbox Code Playgroud)
对此要小心。
| 归档时间: |
|
| 查看次数: |
28825 次 |
| 最近记录: |