Database 将拉丁语-1(ISO 8859-1)文本导入UTF-8 Oracle数据库varchar2字段

Database 将拉丁语-1(ISO 8859-1)文本导入UTF-8 Oracle数据库varchar2字段,database,oracle,utf-8,Database,Oracle,Utf 8,我们有一个Oracle数据库,Oracle电子商务套件(R12.1.3)运行于此 我检查了如何找到数据库的字符集,通过以下答案: 此SQL: SELECT * FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET' 返回: PARAMETER VALUE ---------------------------------------- NLS_CHARACTERSET UTF8 NLS_N_CHARA

我们有一个Oracle数据库,Oracle电子商务套件(R12.1.3)运行于此

我检查了如何找到数据库的字符集,通过以下答案:

此SQL:

SELECT *
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET'
返回:

PARAMETER           VALUE
----------------------------------------
NLS_CHARACTERSET    UTF8
NLS_N_CHARACTERSET  UTF8
有一个来自外部系统的接口,它发送包含AP发票标题和行的文本文件

外部方发送的数据也是UTF8

但是,Oracle电子商务套件中AP_INVOICE_line_ALL表的Description字段是VARCHAR2(240字节)

既然如此,
符号占用了2个字节,我们遇到了一些问题,有时外部文件的描述大于240字节,当这种情况发生时,文件被拒绝。发票导入过程中会出现问题。不是文件被拒绝,而是由于接口的设计,因为描述超过240字节,一些发票行数据没有加载

外部系统的开发人员已确认,他们无法将发票长描述截断为特定的字节计数,因为存在拆分字符(如符号)的风险,从而导致导入过程中出现无效文件问题

外部开发人员建议采用单字节/字符编码格式,如Latin-1(ISO 8859-1)

我意识到测试这一点的简单方法是,他们向我们发送一个带有这种编码的示例文本文件,然后我们将其导入系统,以检查内容的外观

这需要我们一些时间来测试

作为一个快速测试,我在Notepad++中检查了一些东西(我意识到这与Oracle数据库无关)

我用记事本++保存了一个文件,文件编码为拉丁语-1(ISO 8859-1),并键入了一个符号:

然后我将编码更改为UTF-8:

执行此操作时,%符号将无法读取

我想知道这是否是一个可靠的测试,就像在中一样,同样的事情会发生在Oracle中吗

我无法在Oracle中进行测试,因为我没有创建数据库等的权限。我想我可以在Oracle Database 11g Express Edition的安装中尝试一些基本测试,但我已经看到,在这样的安装中,创建的XE数据库不可能超过默认的XE数据库


我们无法更改AP Invoice Lines All表的任何属性,因为它是Oracle电子商务套件中使用的核心表。我们唯一的选择是从外部系统对流程源进行更改。

文件被拒绝。
-为什么文件被拒绝?有任何错误消息吗?好问题-抱歉-我已经修改了我的问题,试图更清楚地解释这个问题。我将首先尝试在测试环境中将列的a从
VARCHAR2(240字节)
更改为
VARCHAR2(240字符)
,并检查这是否有帮助。只需运行
altertable tablename MODIFY(columnname VARCHAR(240 char))
让编码保持原样(utf8)并进行测试。感谢您的回复。我忘了说我们不能更改AP Invoice Lines All表的任何属性,因为它是Oracle电子商务套件中使用的核心表。我们唯一的选择是在流程的源头,从外部系统进行更改。我已经更新了问题,在最后加入了这些信息。将数据库字符集更改为ISO-8859-1肯定是最糟糕的主意。Oracle电子商务套件甚至不会注意到将列从
VARCHAR2(240字节)
更改为
VARCHAR2(240字符)
该文件被拒绝。
为什么拒绝该文件?有任何错误消息吗?好问题-抱歉-我已经修改了我的问题,试图更清楚地解释这个问题。我将首先尝试在测试环境中将列的a从
VARCHAR2(240字节)
更改为
VARCHAR2(240字符)
,并检查这是否有帮助。只需运行
altertable tablename MODIFY(columnname VARCHAR(240 char))
让编码保持原样(utf8)并进行测试。感谢您的回复。我忘了说我们不能更改AP Invoice Lines All表的任何属性,因为它是Oracle电子商务套件中使用的核心表。我们唯一的选择是在流程的源头,从外部系统进行更改。我已经更新了问题,在最后加入了这些信息。将数据库字符集更改为ISO-8859-1肯定是最糟糕的主意。Oracle电子商务套件甚至不会注意到将列从
VARCHAR2(240字节)
更改为
VARCHAR2(240字符)