如何在DB2数据库中查找非UTF-8字符?

如何在DB2数据库中查找非UTF-8字符?,utf-8,db2-400,Utf 8,Db2 400,我想在MySQL数据库中查找非utf8字符,当用户输入时,通常还有其他字符,特别是当用户直接从PDF文件复制到输入框时 我尝试了这个方法,但是它给了我所有的列,不管它们是否有非utf8字符。是否有一个SQL查询可以做到这一点,并且只针对非UTF-8字符 SELECT * FROM MyTable WHERE LENGTH(MyColumn) = CHAR_LENGTH(MyColumn) 这是我的数据库表 table name: employees emp_num(int) birth_dat

我想在MySQL数据库中查找非utf8字符,当用户输入时,通常还有其他字符,特别是当用户直接从PDF文件复制到输入框时

我尝试了这个方法,但是它给了我所有的列,不管它们是否有非utf8字符。是否有一个SQL查询可以做到这一点,并且只针对非UTF-8字符

SELECT * FROM MyTable WHERE LENGTH(MyColumn) = CHAR_LENGTH(MyColumn)
这是我的数据库表

table name: employees
emp_num(int)
birth_date(date)
first_name (varchar(15))
last_name (varchar(20))
gender (ENUM('M','F'))
address (varchar(50))
所以我所做的是

SELECT * FROM employees WHERE LENGTH(address) = CHAR_LENGTH(address)
我不知道这是否正确


这张图片来自我的数据库,请看出现的奇怪的Y和其他字符。

Ÿ
是一个有效的utf8字符(十六进制
C5B8
:2个字节,1个字符)。和一个有效的拉丁字符(十六进制
9f

因此,使用utf8:

mysql> SELECT LENGTH('Ÿ'), CHAR_LENGTH('Ÿ');
+--------------+-------------------+
| LENGTH('Ÿ')  | CHAR_LENGTH('Ÿ')  |
+--------------+-------------------+
|            2 |                 1 |
+--------------+-------------------+
因此,使用length vs char_length测试某些内容,但不测试“非utf8”字符

事实上,唯一的“非utf8”字符是表情符号和一些在
utf8mb4
中但不在
utf8
中的汉字

但也许这不是你想问的问题

由于您没有提供(1)列的字符集,也没有提供(2)连接的字符集,也没有提供(3)文本应该说的内容,因此可以诊断的内容是有限的

什么是“输入框”?它是一个HTML字段吗?有吗

<form accept-charset="UTF-8">
将包括除字母、数字、下划线和空格以外的行

WHERE HEX(col) RLIKE '^(..)*[89ABCDEF]'
将检查第8位为on的任何字节。也就是说,不完全是7位ascii


因此,要么更好地指定问题,要么了解
REGEXP
。我怀疑“utf8”不是一个值得追求的术语。上面的
RLIKEs
也会用
latin1
捕捉到东西。

这正是你要找的:@Martin这似乎正是OP所做的?@riggsfully我不太明白问题是什么?无论定义的列是什么,列内容的编码都是什么(除非它是blob?),这对我不起作用
SELECT*FROM employees WHERE LENGTH(address)=CHAR\u LENGTH(address)
你说的“非utf8字符”是什么意思?UTF-8是一种将Unicode字符表示为字节的方法,而不是字符类型。mmm不知道这一点。谢谢然后我想我的问题是如何在我的列中查找非字母或数字字符}我真的很抱歉@rich James我刚刚发现我的数据库是DB2400
WHERE HEX(col) RLIKE '^(..)*[89ABCDEF]'