视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle中字符集的类型决定varchar2的字符长度
2020-11-09 12:21:57 责编:小采
文档


1.前几天往数据库表里面插入数据的报了一个这样的错误如下:SQLgt; insert into student values(

1.前几天往数据库表里面插入数据的报了一个这样的错误如下:

SQL> insert into student values('中华人民共和',60);
insert into student values('中华人民共和',60)
*
第 1 行出现错误:
ORA-129: 列 "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

下载本文
显示全文
专题