-
参数概述
-
LENGTH_IN_CHAR
varchar类型的长度是否以字符为单位,默认值为:0,取值:0、1;需注意此参数初始化实例后不能再进行修改。
1/是:varchar类型的长度以字符为单位;
0/否:varchar类型的长度以字节为单位。
查看数据库中此参数值:
select NAME,VALUE from v$parameter where name='LENGTH_IN_CHAR';
CHARSET
字符集编码,取值:0、1、2,默认值为:0,需注意此参数初始化实例后不能再进行修改。
0:GB18030,
1:UTF-8,
2:EUC-KR,
查看数据库中此参数值:
select UNICODE();
-
测试
-
LENGTH_IN_CHAR=0 CHARSET=0
create table t1(name varchar(5));
insert into t1 values(‘aaaaa’); ---执行成功
insert into t1 values(‘aaaaab’); ---执行失败,列[name]长度超出定义
insert into t1 values(‘李一’); ---执行成功
insert into t1 values(‘李一a’); ---执行成功
insert into t1 values(‘李一一’); ---执行失败,列[name]长度超出定义
LENGTH_IN_CHAR=1 CHARSET=0
create table t1(name varchar(5));
insert into t1 values(‘aaaabbbbb’); --执行成功
insert into t1 values(‘aaaabbbbbc’); --执行失败,列[name]长度超出定义
insert into t1 values(‘一二三四五’); ---执行成功
insert into t1 values(‘一二三四五六’); ---执行失败,列[name]长度超出定义
LENGTH_IN_CHAR=0 CHARSET=1
create table t1(name varchar(5));
insert into t1 values(‘aaaaa’); ---执行成功
insert into t1 values(‘aaaaab’); ---执行失败,列[name]长度超出定义
insert into t1 values(‘一’); ---执行成功
insert into t1 values(‘一a’); ---执行成功
insert into t1 values(‘一aa’); ---执行成功
insert into t1 values(‘一一’); ---执行失败,列[name]长度超出定义
LENGTH_IN_CHAR=1 CHARSET=1
create table t1(name varchar(5));
insert into t1 values(‘aaaaabbbbbcccccddddd’); ---执行成功
insert into t1 values(‘aaaaabbbbbcccccddddde’); ---执行失败,列[name]长度超出定义
insert into t1 values(‘一二三四五六’); ---执行成功
insert into t1 values(‘一二三四五六七’); ---执行失败,列[name]长度超出定义
-
总结
- CB10830中文占2个字符,英文占1个字符;UTF-8中文占3个字符,英文占一个字符;
- 当LENGTH_IN_CHAR=1 CHARSET=0时,varchar会将字节长度扩充2倍,当LENGTH_IN_CHAR=1 CHARSET=1时,varchar会将字节长度扩充4倍,