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

时间:2017-05-07 16:59:57

标签: utf-8 db2-400

我想在我的MySQL数据库中查找非utf8字符,当用户输入addesses通常有其他字符时,尤其是当用户直接从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)

不知道这是否正确

enter image description here

这张图片来自我的数据库,看到即将出现的奇怪的Y和其他角色。

1 个答案:

答案 0 :(得分:1)

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

所以,使用utf8:

mysql> SELECT LENGTH('Ÿ'), CHAR_LENGTH('Ÿ');
+--------------+-------------------+
| LENGTH('Ÿ')  | CHAR_LENGTH('Ÿ')  |
+--------------+-------------------+
|            2 |                 1 |
+--------------+-------------------+

所以,你的测试长度与char_length测试某事,但不测试“非utf8”字符。

事实上,唯一的“非utf8”字符是表情符号以及utf8mb4但不在utf8中的一些中文字符。

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

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

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

<form accept-charset="UTF-8">

使用SELECT HEX(col) ...向我们展示表格中的当前内容。请参阅here中的“测试数据”,以便对角色的内容进行初步分析。

其他

搜索非alphanum:

WHERE col RLIKE '[^a-zA-Z0-9_ ]'

将包含除字母,数字,下划线和空格之外的其他行。

WHERE HEX(col) RLIKE '^(..)*[89ABCDEF]'

将检查第8位的任何字节。也就是说,不完全是7位ascii。

因此,要么更好地指出问题,要么了解REGEXP。我怀疑“utf8”不是追逐的词。上面的RLIKEs也会抓住latin1中的内容。