我的项目正在进行技术升级,所以我们正在将Oracle DB从11g升级到12c。SAP DataServices升级到了14.2.7.1156版本。
在Oracle 12C中的表默认为varchar(字节),而它应该是varchar(char)。我理解这是正常的。所以,我改变了每个数据存储的会话,运行了
`ALTER session SET nls_length_semantics=CHAR;`
当我创建一个新的表,使用varchar(1)时,我能够从Oracle加载像汉字(即东)这样的unicode字符到新表中。
然而,当我尝试通过SAPDS将相同的unicode字符加载到同一个表中时,它向我抛出了一个错误 "ORA-12899 - value too large for column"。我的数据存储设置是。
Locale
Language: default
Code Page: utf-8
Server code page: utf-8
Additional session parameters:
ALTER session SET nls_length_semantics=CHAR
我真的很想知道我在SAP BODS中需要改变什么设置,因为我的Oracle似乎工作正常。
我认为,你应该考虑将表列从varchar2(x BYTE)修改为varchar2(x CHAR),以允许Unicode(UTF-8格式)数据,并避免了 ORA-12899
.
create table test1 (name varchar2(100));
insert into test1 values ('east');
insert into test1 values ('东');
alter table test1 modify name varchar2(100 char);
你可以检查每一列的'char_used',比如--。
select column_name, data_type, char_used from user_tab_columns where table_name='TEST1';