1

我的项目正在进行技术升级,因此我们将 Oracle DB 从 11g 升级到 12c。SAP DataServices 升级到版本 14.2.7.1156。

Oracle 12C 中的表在应该为 varchar (char) 时默认为 varchar (byte)。我明白这是正常的。因此,我更改了每个正在运行的数据存储的会话

`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

由于我的 Oracle 似乎工作正常,我非常希望知道我需要在我的 SAP BODS 中更改哪些设置。

4

1 回答 1

0

我认为,您应该考虑将表列从 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';
于 2016-11-02T13:05:58.997 回答