如何在mysql中查找非utf8数据

Bre*_*ret 7 mysql

好的,所以我有一个 mysql 数据库,其中包含来自不同客户的输入数据。客户被告知他们的数据应该只编码为 utf8,但是我意识到目前没有检查这一点,有些人正在使用未编码为 utf8 的字符。我们打算添加一些检查,但为了清理数据,已经有一个 sql 或 mysql 查询(或管理命令)将向我显示未编码为 utf8 的数据。

对不起,如果这是一个愚蠢的问题,我是一名 Linux 系统管理员,对数据库的接触有限。

谢谢

dar*_*onw 16

您可以通过将字节长度与列上的字符长度进行比较来检查(非)UTF-8 数据的存在,例如:

SELECT * FROM MyTable
WHERE LENGTH(MyColumn) <> CHAR_LENGTH(MyColumn)
Run Code Online (Sandbox Code Playgroud)

多字节字符将具有更大的LENGTH(字节),因此您需要查找不满足该条件的地方。

请注意,MySQL 的utf8字符集不是真正的 Unicode UTF-8,因为它只支持每个字符最多 3 个字节。如果您的 MySQL 高于 5.5.3,您可以使用utf8mb4每个字符获取 4 个字节。

  • 我不认为这是正确的。UTF-8 可以将字符编码为 1 到 4 个字节,那么将字符长度与字节长度进行比较如何揭示非 UTF-8 数据?每个字符一个字节仅包含(大致)ASCII 字符,因此您在这里回答的问题是如何查找非 ASCII 字符,而不是非 UTF-8 字符。我错过了什么吗? (4认同)