通常,我们定义一个varchar2字段时,使用的是如下定义:
Cola Varchar2(10);
他表示cola可以存储最多10个英文字符,或者5个zhs16gbk中文字符,或者3个utf8的中文字符。
上面的区别对使用英文的国家其实不是问题,但是很不幸,我们使用的是中文~
我们平常遇到的最大问题就是做跨字符集导数时,源端使用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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11411056/viewspace-736526/