Oracle迁移DM8后NCHAR字符类型的转换说明

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中:NCHARCHAR都是:一个精度存放一个字母,存放一个汉字需要两个精度。

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

​ 该参数的不同值会影响空格是否会占用精度;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(’A’) A,ascii(’a’) a,ascii(’0’) zero,ascii(’ ’) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2.CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C -- - 赵 A 3.CONCAT 连接两个字符串; SQL> select concat(’010-’,’88888888’)||’转23’ 高乾竞电话 from dual; 高乾竞电话 ---------------- 010-88888888转23 4.INITCAP 返回字符串并将字符串的第一个字母变为大写; SQL> select initcap(’smith’) upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 SQL> select instr(’oracle traning’,’ra’,1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst; NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL)) ------ ------------ ---------------- ------------ --------- -------------------- 高乾竞 3 北京市海锭区 6 9999.99 7 7.LOWER 返回字符串,并将所有的字符小写 SQL> select lower(’AaBbCcDd’)AaBbCcDd from dual; AABBCCDD -------- aabbccdd 8.UPPER 返回字符串,并将所有的字符大写 SQL> select upper(’AaBbCcDd’) upper from dual; UPPER -------- AABBCCDD 9.RPAD和LPAD(粘贴字符) RPAD 在列的右边粘贴字符 LPAD 在列的左边粘贴字符 SQL> select lpad(rpad(’gao’,10,’*’),17,’*’)from dual; LPAD(RPAD(’GAO’,1 ----------------- *******gao******* 不够字符则用*来填满 10.LTRIM和RTRIM LTRIM 删除左边出现的字符串 RTRIM 删除右边出现的字符SQL> select ltrim(rtrim(’ gao qian jing ’,’ ’),’ ’) from dual; LTRIM(RTRIM(’ ------------- gao qian jing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值