1、NCHAR与CHAR类型的区别:
oracle中:NCHAR一个精度可以存放一个字母或者一个汉字;CHAR:一个精度存放一个字母,存放一个汉字需要两个精度。
Oracle--eg:
SQL> create table t_nchar_char (a_nchar nchar(10),b_char char(10));
表已创建。
SQL> insert into t_nchar_char values ('一二三四五六七八九十',null);
已创建 1 行。
SQL> insert into t_nchar_char values (null,'一二三四五六七八九十'); --10个汉字在char中占用了20精度,所以没有插入成功;
insert into t_nchar_char values (null,'一二三四五六七八九十') *
第 1 行出现错误:
ORA-12899: 列 "GAORUI"."T_NCHAR_CHAR"."B_CHAR" 的值太大 (实际值: 20, 最大值:10)
SQL> insert into t_nchar_char values ('1234567890',null);
已创建 1 行。
SQL> insert into t_nchar_char values (null,'1234567890');
已创建 1 行。
SQL> insert into t_nchar_char values ('abcdefghij',null);
已创建 1 行。
SQL> insert into t_nchar_char values (null,'abcdefghij');
已创建 1 行。
DM中:NCHAR和CHAR都是:一个精度存放一个字母,存放一个汉字需要两个精度。
DM--eg:
SQL> create table t_nchar_char (a_nchar nchar(10),b_char char(10));
executed successfully
used time: 28.800(ms). Execute id is 4400.
SQL> insert into t_nchar_char values ('一二三四五六七八九十',null);
insert into t_nchar_char values ('一二三四五六七八九十',null);
[-6169]:Column [A_NCHAR] out of length. --精度不足
used time: 9.769(ms). Execute id is 0.
SQL> insert into t_nchar_char values (null,'一二三四五六七八九十');
insert into t_nchar_char values (null,'一二三四五六七八九十');
[-6169]:Column [B_CHAR] out of length. --精度不足
used time: 0.655(ms). Execute id is 0.
SQL> insert into t_nchar_char values ('1234567890',null);
affect rows 1
used time: 0.970(ms). Execute id is 4403.
SQL> insert into t_nchar_char values (null,'1234567890');
affect rows 1
used time: 1.658(ms). Execute id is 4404.
SQL> insert into t_nchar_char values ('abcdefghij',null);
affect rows 1
used time: 1.514(ms). Execute id is 4405.
SQL> insert into t_nchar_char values (null,'abcdefghij');
affect rows 1
used time: 0.836(ms). Execute id is 4406.
SQL> insert into t_nchar_char values ('一二三四五',null);
affect rows 1
used time: 1.340(ms). Execute id is 4409.
SQL> insert into t_nchar_char values (null,'一二三四五');
affect rows 1
used time: 0.603(ms). Execute id is 4410.
2、使用DTS迁移oracle中NCHAR数据类型到DM,DTS会自动将NCHAR 类型转换为CHAR类型,并且将精度翻倍,以这种方式保证了精度的充足。
oracle端:
create table t_nchar_char (a_nchar nchar(10),b_char char(10));
迁移后:
dm端:
a_nchar 的精度变为nchar(20);
b_char 的精度不变char(10);
3、参数:BLANK_PAD_MODE
设置空格填充模式 ( 0),可选值 0/1
该参数的不同值会影响空格是否会占用精度;