在oracle中一个字符特别是中文字符占几个字节是与字符集有关的。
比如GBK,汉字就会占两个字节,英文1个;如果是UTF-8,汉字一般占3个字节,英文还是1个。但是一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择GBK的编码格式,但是我们在页面做输入字符串长度的校验的时候,还是以数据库设计字段最大长度除3来作为最大长度-----防止数据库移植时设置不同编码格式。
查看字符串占用的字符数:
select length('12中华') from dual; --4
查看字符串占用的字节数:
select lengthb('12中华') from dual; --8
nvarchar2的一个汉字字符都是占用两个字节的,与字符集无关:
select length(N'中华1') from dual; --3
select lengthb(N'中华1') from dual; --6
补充:
(1)
查询字符集语句: select userenv('language') from dual; (SIMPLIFIED CHINESE_CHINA.AL32UTF8)
查询结果分为三部分: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集), 其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集 。
(2)如何查看Oracle的字符集,日期格式,语言等?
SYS>show parameter nls; --得不到具体全面的value
SYS>select * from nls_database_parameter; --nls_database_parameter表才是最详细的