Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中字符集的类型决定varchar2的字符长度

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 name="NLS_CHARACTERSET";
来修改字符集5.如果字符集为AL32UTF8,可以看出下面的例子为,每个中文占用三个字节。SQL> select lengthb("中") from dual;LENGTHB("中")
-------------
            3Oracle em中按钮乱码解决办法如何升级Oracle 9i到10g相关资讯      oracle 
  • [INS-32052] Oracle基目录和Oracle  (07/22/2014 07:41:41)
  • Oracle 4个大对象(lobs)数据类型  (02/03/2013 12:33:05)
  • Oracle按时间段分组统计  (07/26/2012 10:36:48)
  • [Oracle] dbms_metadata.get_ddl的  (07/12/2013 07:37:30)
  • Liferay Portal 配置使用Oracle和  (07/31/2012 20:07:18)
  • Concurrent Request:Inactive   (07/20/2012 07:44:05)
本文评论 查看全部评论 (0)
表情: 姓名: 字数