ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 你或许不知道的varchar2类型的定义

你或许不知道的varchar2类型的定义

原创 Linux操作系统 作者:ljm0211 时间:2012-07-24 17:15:57 0 删除 编辑

通常,我们定义一个varchar2字段时,使用的是如下定义:

Cola Varchar2(10);

 

他表示cola可以存储最多10个英文字符,或者5zhs16gbk中文字符,或者3utf8的中文字符。

 

上面的区别对使用英文的国家其实不是问题,但是很不幸,我们使用的是中文~

我们平常遇到的最大问题就是做跨字符集导数时,源端使用16gbk,而目标端使用utf8,而且原表字段长度又刚好满足最长的长度需求。这样导数时就会有字段超长的问题,不断的报错。

平常的处理方法都是先导表结构,修改所有的字符类型字段(char varchar2)为原长度的4/3以上。

 

其实 varchar2 还有另一种定义方法:

Colb varchar2(10 char);

 

他表示的意义是colb可以存储最多10个任意字符。看下面测试:

SQL> create table a (a varchar2(2 char));

 

Table created

 

Executed in 0.016 seconds

 

SQL> insert into a values ('哈哈');

 

1 row inserted

 

Executed in 0 seconds

 

SQL> insert into a values ('haha');

 

insert into a values ('haha')

 

ORA-12899: value too large for column "AUTODATA"."A"."A" (actual: 4, maximum: 2)

 

SQL> commit;

 

Commit complete

 

Executed in 0 seconds

 

SQL> create table b(b varchar2(2));

 

Table created

 

Executed in 0.015 seconds

 

SQL> insert into b values ('哈哈');

 

insert into b values ('哈哈')

 

ORA-12899: value too large for column "AUTODATA"."B"."B" (actual: 4, maximum: 2)

 

如果我们在开发阶段就要求开发人员以第二种方式定义varchar2,跨字符集的数据迁移就不需要那么纠结了~~ 而且还不会受限于varchar2最多只能存储2000个汉字~~

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11411056/viewspace-736526/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-14

  • 博文量
    272
  • 访问量
    442407