首页
学习
活动
专区
圈层
工具
发布

varchar2
EN

Stack Overflow用户
提问于 2022-10-20 15:43:03
回答 1查看 49关注 0票数 0

我很难将Unicode (MS: nvarchar(length))数据从Oracle列中提取出来。

连接通过MS驱动程序进行。在SSIS工具箱中,源代码/dest如下所示:

我想我应该直接进入Source组件的高级编辑器,并将外部列和输出列都更改为DT_WSTR类型。不去。只要我单击OK,然后返回到Adv.Editor,它就会翻转回DT_STR。我不记得有任何其他的线人表现如此恶劣。请注意,这种翻转发生在执行之前,甚至在验证之前。ValidateExternalMetaData开或关都没有区别。

查看这个答案,我发现了Oracle服务器的NLS_CHARACTERSET设置,以及本地机器注册表中的设置:

(我在Oracle服务器上运行了这个程序:

代码语言:javascript
复制
SELECT parameter, value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';

)

Oracle : AL32UTF8本地机器(注册表):AMERICAN_AMERICA.WE8MSWIN1252

然后在源中尝试在Oracle SQL中进行一些转换。这是:

代码语言:javascript
复制
CONVERT(THECOLUMN,'WE8MSWIN1252','AL32UTF8') AS THECOLUMN,

没有效果。

这是:

代码语言:javascript
复制
CONVERT(THECOLUMN,'UTF8','AL32UTF8') AS THECOLUMN,

产生了一个奇怪的效果。非英语字符(特别是波兰语Ł)在预览版中表现得很完美。但是,一旦数据离开源(在data中查看),它就回到了“一些字符ASCII 26而不是Ł--一些更多的字符”。并且SSIS数据类型仍然是DT_STR,并且拒绝更改为DT_WSTR。

我卡住了。有人能帮忙吗?

编辑:更多信息谢谢大家的评论。

Context --我正在处理一个包含400个软件包的ETL安装,因此更改驱动程序是很困难的。出于“原因”,我甚至不能访问Oracle DAS,除非在一台服务器上(实际上,远程桌面到该服务器)。因此,没有DBA/sysadmin的参与,就不可能摆弄服务器注册表设置/语言等。司机信息:

在ODBC驱动程序中:

在引用的其他问题中,可能的驱动程序列表与我的情况并不完全匹配,因为我试图通过SSIS而不是原始的.NET进行连接。我要做的只是:从Oracle表中获取Unicode字符数据(好的,这可能是一个视图,但这是我力所能及的),通过SSIS将其连接到一个MS-SQL nvarchar列中。

Oracle中的数据显然是某种类型的Unicode (参见上面预览版的测试)。然而,Source组件显然认为它是DT_STR (SSIS数据类型对应于varchar)。并拒绝通过高级编辑器接受该列类型的“硬覆盖”。因此,虽然在预览中(在Source组件实际获取数据之前)数据是正确的(带有波兰字符),但一旦它击中Source组件,它就已经损坏,“用ASCII(26)替换任何非ASCII”。

按照韦恩弗里德的建议运行这个程序:

代码语言:javascript
复制
SELECT TheColumn,DUMP(TheColumn,1016)

给我这个

Typ=1 Len=10字符Set=AL32UTF8: 50,4c,55,41,54,52,45,47,c5,81

猜测这意味着什么:如果我做了MS

代码语言:javascript
复制
SELECT CHAR(CONVERT(int,0x50))

对于每个十六进制值,字符都是有意义的,直到C5 (“C5”)和81 ("")为止。也许Oracle服务器使用的编码与本地Server上的编码不同。

但我的主要问题是,除了非Unicode文本之外,其他任何东西都要通过SSIS。

EN

回答 1

Stack Overflow用户

发布于 2022-10-21 10:24:24

DUMP的结果是完美的,当然您不需要任何CONVERT

我认为问题是过时的ODBC驱动程序"Microsoft ODBC for Oracle",它是基于Oracle 7.3x的!

请参阅Oracle的ODBC驱动程序

Oracle的ODBC驱动程序不支持任何新的Oracle8数据类型- Unicode数据类型、BLOB、CLOBs等等。

第二个驱动程序“驱动程序”是我从未见过的。根据的驱动程序历史记录的说法,这也是不可取的。

您应该使用Oracle提供的ODBC驱动程序,您可以从Microsoft Windows 32位的Oracle即时客户端下载Oracle客户端下载Microsoft (x64) 64位下载"ODBC“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74142700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档