oracle GBK编码下的字符类型

一、查询数据库编码
方式一:select userenv('language') from dual;
查询结果是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,是适用于中国的中文字符集,只能存储中文和英文字符。
方式二:select * from V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
查询结果是ZHS16GBK,NLS_CHARACTERSET是指数据库字符集。

二、GBK编码下有哪些字符类型,以及各字符类型所占长度
CHAR:固定长度,输入不足长度的字符将自动用空格补足,区分中英文,一个中文占用2个字节,一个英文占用1个字节。
VARCHAR:可变长度,最终长度决定于输入多少长度的字符,区分中英文,一个中文占用2个字节,一个英文占用1个字节。
VARCHAR2:可变长度,最终长度决定于输入多少长度的字符,区分中英文,一个中文占用2个字节,一个英文占用1个字节。与VARCHAR的区别在于VARCHAR2不区分null和空字符串,而VARCHAR区分,null不分配内存,空字符串占长度0。
NVARCHAR2:可变长度,最终长度决定于输入多少长度的字符,不区分中英文,一个英文/中文占用2个字节。
以上默认byte类型。
VARCHAR2(CHAR):可变长度,无论是英文还是中文都占1个字节,看成为一个字符。

VARCHAR2字符下查询长度:
select length('天天向上') from dual;
查询结果为4。
select lengthb('天天向上') from dual;
查询结果为8。
select length('123day') from dual;
查询结果为6。
select lengthb('123day') from dual;
查询结果为6。

三、如何截取所需的字节长度
如果某字段定义为VARCHAR2类型,且一个值里同时存在中文和英文,可用以下语句进行指定长度的截取或筛选。
select 字段 from 表名 where 2*lengthb(字段)-length(字段)>指定长度;

你可能感兴趣的:(oracle,数据库,sql)