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

Sql Oracle DB程序员:如何识别表中的双字节字符数据?,sql,oracle,utf-8,internationalization,Sql,Oracle,Utf 8,Internationalization,您好,Oracle sql程序员,您如何识别数据库中的双字节字符?我的意思是查找表1第1列中包含双字节字符(如中文字符)的所有数据 更新1:我甚至不知道列中会包含哪些汉字,我只需要找到用户输入的所有非英文字符的名字和姓氏列,然后将值更改为NA。我从未尝试过这一点,但我想您可以将每个字符转换为一个数字,并查找256以上的值: SQL> select ascii(unistr('\53f0')) from dual; ASCII(UNISTR('\53F0')) --------------

您好,Oracle sql程序员,您如何识别数据库中的双字节字符?我的意思是查找表1第1列中包含双字节字符(如中文字符)的所有数据


更新1:我甚至不知道列中会包含哪些汉字,我只需要找到用户输入的所有非英文字符的名字和姓氏列,然后将值更改为NA。

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

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

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

我从未尝试过这种方法,但我想您可以将每个字符转换为一个数字,然后查找256以上的值:

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

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

假设您真正的意思是非英语(即任何不在US7ASCII字符集中的字符),最简单的选项如下

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

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

假设您真正指的是非英语字符(即US7ASCII字符集以外的任何字符),最简单的选项如下

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

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

数据库和国家字符集是什么?列的数据类型是什么?嗨,oracle 11gR2,AL16UTF16,列的数据类型是varchar2(50),thx!AL16UTF16不是有效的数据库字符集。我敢打赌这是您的国家字符集--它控制
NCHAR
NVARCHAR
列中的数据的编码方式。如果您的列是
VARCHAR2
,那么您的数据库字符集是什么?坦率地说,如果您不想要多字节字符,为什么您的数据库中有多字节字符集?为什么要阻止国际化?什么是数据库和国家字符集?列的数据类型是什么?嗨,oracle 11gR2,AL16UTF16,列的数据类型是varchar2(50),thx!AL16UTF16不是有效的数据库字符集。我敢打赌这是您的国家字符集--它控制
NCHAR
NVARCHAR
列中的数据的编码方式。如果您的列是
VARCHAR2
,那么您的数据库字符集是什么?坦率地说,如果您不想要多字节字符,为什么您的数据库中有多字节字符集?为什么您要阻止国际化?哇,这很聪明,但当我测试它时,输出数据集不仅包括first_name列中的汉字值,还包括first_name列中顶部带有小破折号的法语字符,如o。所以我的问题是,这些法语字符也是双字节字符吗?因为我的老板只告诉我要去掉双字节值,比如汉字,但他没有提到那些法语字符,你知道吗?我们太近了!谢谢@magqq-是的,法语和其他西欧字符在UTF-8字符集中需要超过一个字节的存储。哇,这很聪明,但当我测试它时,输出数据集不仅仅包括第一列的汉字值,它还包括法语字符,如“名”列值中顶部带有小破折号的o。所以我的问题是,这些法语字符也是双字节字符吗?因为我的老板只告诉我要去掉双字节值,比如汉字,但他没有提到那些法语字符,你知道吗?我们太近了!谢谢@magqq-是的,法语和其他西欧字符在UTF-8字符集中需要超过一个字节的存储空间。