SQL如何选择所有utf8mb4字符?

liz*_*dhr 2 mysql sql ascii utf-8 utf8mb4

我有这样的疑问:

SELECT count(*) from TABLE WHERE LENGTH(COLUMN) !=CHAR_LENGTH(COLUMN);
Run Code Online (Sandbox Code Playgroud)

如果 count 返回一个大于零的值,它告诉我在某些行中有非 ASCII 字符。

我如何知道表中是否有 utf8mb4 字符?

有没有办法查询所有utf8mb4字符?

Ric*_*mes 7

这取决于“utf8mb4 字符”的含义。这句话完全是由“utf8mb4字符”组成的。这句话完全是由“ascii”字符组成的。

假设您的意思是“非 ASCII”并且列是CHARACTER SET utf8mb4,那么您的查询应该可以正常工作。

此技术适用于任何多字节字符集,例如 utf8、big5 等。它不适用于单字节字符集,例如 latin1、latin5 等。

如果您想从列中提取非 ASCII 字节,最好使用某些应用程序语言来完成。它可能有一个简单的方法来做到这一点,或者您可以获取十六进制并使用正则表达式查找一对十六进制[CDEF].

如果您的意思是“utf8mb4”而不是“utf8”,那么十六进制将是F. 并且可以通过以下方式发现该行

HEX(col) RLIKE "^(..)*F."
Run Code Online (Sandbox Code Playgroud)

  • 4字节UTF8字符的编码(即那些在mysql的utf8mb4中,但不在mysql的utf8中),以十六进制“F”开头。请参阅[维基百科](https://en.wikipedia.org/wiki/UTF-8) 和许多其他参考资料。 (2认同)