从Oracle变量字符2到SQL nvarchar

2hh7jdfx  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(171)

我在尝试获取Unicode(MS-SQL:nvarchar(长度))数据。
连接是透过MS Oracle驱动程序进行的。Source/dest在SSIS工具箱中看起来如下所示:

我想我只需要进入Source组件的高级编辑器,将External和Output列都更改为DT_WSTR类型。没有成功。我一单击“确定”,然后返回到高级编辑器,它就翻转回DT_STR。我不记得有任何其他源的行为如此糟糕。请注意,这种翻转发生在执行之前,甚至是验证之前。ValidateExternalMetaData的开或关没有区别。
通过查看this answer,我发现了Oracle服务器的NLS_CHARACTERSET设置,以及本地计算机注册表中的设置:
(我在Oracle服务器上运行了此程序:

SELECT parameter, value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';


Oracle服务器:AL 32 UTF8本地计算机(注册表):美国_美国. WE 8 MSWIN 1252
然后在源中的Oracle SQL中尝试了一些转换。这:

CONVERT(THECOLUMN,'WE8MSWIN1252','AL32UTF8') AS THECOLUMN,

没有效果。
这一点:

CONVERT(THECOLUMN,'UTF8','AL32UTF8') AS THECOLUMN,

产生了一种奇怪的效果。非英语字符(特别是波兰语)在 Preview 中完全通过。但数据一离开源(在Data Viewer中查看),它就回到“一些字符[ASCII 26而不是]一些更多字符”。SSIS数据类型仍然是DT_STR,并且拒绝更改为DT_WSTR。
我被卡住了。有人能帮忙吗?

编辑:更多信息感谢大家的意见。
上下文我正在处理400个软件包的现有ETL安装,因此更改驱动程序将很困难。出于“原因”,我甚至不能访问Oracle DAS,除非在一台服务器上(确切地说,是该服务器的远程桌面)。因此,如果没有DBA/sysadmin的参与,就不可能摆弄服务器注册表设置/语言等。驱动程序信息:


与ODBC驱动程序中得:

引用的其他问题中的可能驱动程序列表与我的情况并不完全匹配,因为我尝试通过SSIS而不是原始. NET进行连接。我尝试做的只是:通过SSIS将Unicode字符数据从一个Oracle表(好,它可能是一个视图,但这超出了我的能力范围)获取到一个MS-SQL nvarchar 列中。
Oracle中的数据显然是某种Unicode格式(请参阅我的测试和上面的预览)。(SSIS数据类型对应于MS-SQL非Unicode varchar)。并且拒绝通过高级编辑器接受对此列类型的“硬覆盖”。因此,在预览(假定在源组件实际获得数据之前)数据是正确的(具有波兰字符),一旦它命中源组件,它就已经被损坏到“用ASCII(26)替换任何非ASCII的东西"。
按照Wernfried的建议运行该程序:

SELECT TheColumn,DUMP(TheColumn,1016)

给我这个-同样,只在 Preview 中,而不是在通过SSIS流出Source的数据中:
PLUATREG典型值长度字符集第50、4c、55、41、54、52、45、47、c5、81条
猜测这意味着什么:如果我使用MS-SQL

SELECT CHAR(CONVERT(int,0x50))

对于这些十六进制值中的每一个,字符都是有意义的,直到C5(“Å”)和81(“”)。也许Oracle服务器使用的编码与本地SQL Server上的编码不同。
但我的主要问题是将非Unicode文本以外的 * 任何内容 * 导入SSIS。

fnvucqvd

fnvucqvd1#

DUMP的结果是完美的,当然你不需要任何CONVERT
我认为问题出在古老而过时的ODBC驱动程序“Microsoft ODBC for Oracle”上,它是基于Oracle 7. 3x的!
请参阅ODBC Driver for Oracle
Oracle的ODBC驱动程序不支持任何新的Oracle 8数据类型- Unicode数据类型、BLOB、CLOB等
第二个驱动程序“微软Oracle ODBC驱动程序”我以前从未见过。根据Driver history for Microsoft SQL Server,它也被弃用。
您应该使用Oracle提供的ODBC驱动程序,您可以从Oracle Instant Client Downloads for Microsoft Windows 32-bitOracle Instant Client Downloads for Microsoft Windows (x64) 64-bit下载“ODBC包

相关问题