为什么一台机器在 SSIS OLE DB 源任务中为相同的数据库列假定 unicode 而另一台非 unicode?

Why does one machine assume unicode and another non-unicode for same database columns in SSIS OLE DB Source task?

一位同事制作了一个 SSIS 包,该包从 Oracle 中提取数据并将其传输到几乎相同的 SQL 服务器数据库,因此只需使用 OLE DB 源 (Oracle) 即可完成大量数据流任务到 OLE DB 目标 (SS)。当我在我的计算机上打开它时,我在所有源任务上都收到错误消息“列 [列名] 无法在 unicode 和非 unicode 字符串数据类型之间转换”。如果我添加一个数据转换任务以将 unicode 列转换为非 unicode,一切正常,但我真的希望它像他那样工作,因为它在生产服务器上是 运行 这样的。我最好的猜测是它与 Oracle 客户端或驱动程序或 NLS_LANG 变量的安装有关,但我似乎无法解决它。我的环境变量NLS_LANG = AMERICAN_AMERICA.WE8ISO8859P1

我担心我的 Oracle 客户端安装会因为我的注册表值出现问题。自从我再次完成安装过程后,现在我已经安装了 3 个客户端。这些是第三个客户端的注册值,我自己添加了 NLS_LANG 并重新启动。我更像是一名 SQL 服务器开发人员,所以我可能在这里说错了。

解决方案是将 NLS_LANG 环境变量值设置为 AMERICAN_AMERICA.WE8MSWIN1252 以匹配我的同事和我的注册表的值,因为不知何故我没有注意到它们是不同的!但是,NLS_LANG 都没有设置为开始,所以真正的解决方案是添加它。我重新启动,当我重新打开包时,出现零错误。