您好,欢迎访问一九零五行业门户网

Oracle中字符集的类型决定varchar2的字符长度

1.前几天往数据库表里面插入数据的报了一个这样的错误如下:sqlgt; insert into student values(
1.前几天往数据库表里面插入数据的报了一个这样的错误如下:
sql> insert into student values('中华人民共和',60);
insert into student values('中华人民共和',60)
                           *
第 1 行出现错误:
ora-12899: 列 system.student.name 的值太大 (实际值: 12, 最大值: 6)
本来建立表的时候字符长度就设置为6了,可是插入六个中文的时候就是报错,表结构如下:
sql> desc student;
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
name                                               varchar2(6)
age                                                number(3)
后来经过查了大量的资料之后发现,varchar2的长度是有字符集的类型决定的。
内容如下:
       varchar2最大是4000字节,那么就看你的oracle字符集,如果字符集是16位编码的,zhs16gbk,那
么每个字符16位,2字节,可以容纳一个中文字符,所以可以容纳2000字符。如果是al32utf8编码的字符集,,三个字节为一个中文字符,那么只能存储 1333个字符。
2.查看字符集的类型的语句:
sql> set wrap off;
sql> select parameter,value from nls_database_parameters where parameter like 'nls_characterset';
parameter                      value
------------------------------ -------------------------------------------------
nls_characterset               zhs16gbk
所以上面插入的字符就只能是3个中文字符。
如果将上面的字符编码改为32位编码的,则只能存入1.5个中文字符。
3.10 查看新建数据库的字符集设置
sql> set wrap off
sql> set lines 1000
sql> select * from nls_database_parameters;
4.可以用update props$ set value$='zhs16gbk' where;
来修改字符集
5.如果字符集为al32utf8,可以看出下面的例子为,每个中文占用三个字节。
sql> select lengthb('中') from dual;
lengthb('中')
-------------
            3
其它类似信息

推荐信息