Oracle DB程序员:如何识别表中的双字节字符数据?

时间:2012-03-17 00:56:39

标签: sql oracle utf-8 internationalization

你好Oracle编程程序员,你如何识别db中的双字节字符,我的意思是找到table1中第1列中包含双字节字符(如中文字符)的所有数据?

更新1:我甚至不知道列中的汉字是什么,我只需要查找用户输入任何非英文字符的所有first_name和last_name列,然后将值更改为NA。

2 个答案:

答案 0 :(得分:4)

假设您真正意味着非英语(即任何字符不在US7ASCII字符集中)的最简单选项将类似于

UPDATE table_name
   SET first_name = 'NA'
 WHERE length( first_name ) != lengthb( first_name )

LENGTH以字符形式返回字符串的长度,而LENGTHB以字节为单位返回字符串的长度。 UTF-8使用单个字节对US7ASCII字符进行编码。如果有任何非US7SACII字符,则字节长度将大于字符长度。

答案 1 :(得分:0)

我从未尝试过这个,但我想你可以将每个字符转换为数字并查找超过256的值:

SQL> select ascii(unistr('\53f0')) from dual;

ASCII(UNISTR('\53F0'))
----------------------
                 21488