创建一个表
create table test(
name varchar2(6),
name1 nvarchar2(6)
)
例1、insert into test (name,name1) values('abcdef','hijklm');
可以成功插入,且name,name1的长度都是6,所占字节也是6
验证sql: select name,length(name),lengthb(name1) from test 分别查询字段值,值的长度,所占字节
例2、insert into test (name,name1) values('中华人民共和','中央人民政府');
这一句是插入不能成功的
name字段长度是6,但是中文一个字符可能占两个字节或三个字节,所以name是不能插入6个中文的。
中文在oracle数据库的字符集不同的情况下,所占字节也不相同。
当字符集为UTF-8时,一个中文占三个字节
当字符集为ZHS16GBK时,一个中文占两个字节
查询数据库字符集:select * from nls_database_parameters
所以例2中,如果字符集为UTF-8,则name字段最多可以存储两个中文;如果字符集为ZHS16GBK时,则name字段最多可以存储3个中文
总结如下:
1、对于英文字符:
varchar2(6)可以最多存放6个字符
2、对于中文字符:
数据库字符集为UTF-8,varchar2(6) 最多存放2个字符
数据库字符集为ZHS16GBK,varchar2(6) 最多存放3个字符
3、不管是中文字符,还是英文字符,nvarchar2(6)都可以存放6个字符