我有一个法国 Oracle 数据库恢复到美国服务器。该数据库的 NLS_CHARACTERSET 是 AL32UTF8。该数据库中的表中有一个 VARCHAR2 字段,可以包含 unicode 文本。一条记录的该字段的值为“é”。我可以在 SQL*Plus 和 TOAD 中运行以下查询,一切正常。
select * from foo where bar = 'é';
当我使用 System.Data.OracleClient 编写一个 nUnit 单元测试并通过 TestDriven.net 运行它时,它运行完美。当我从 WinForms 应用程序运行完全相同的代码时,查询将转换为以下内容:
select * from foo where bar = 'e';
这会导致查询不从 .Net 应用程序返回任何行,即使它从 SQL*Plus、TOAD 和 .Net 单元测试返回行也是如此。
我知道 System.Data.OracleClient 已被贬低,但它仍然有效。此代码位于 Oracle 正在逐步淘汰的系统中,因此转换或升级几乎没有意义。
查询从 TestDriven.Net (ProcessInvocation86.exe) 工作的事实告诉我 OCI 客户端和 OracleClient 能够接受查询中的 unicode 字符。WinForms 应用程序将 'é' 转换为 'e' 告诉我,.Net WinForms 中的某处正在翻译它。我该如何关闭它?如果可以避免,我不想对注册表进行任何更改,并且应用程序需要在法国和美国运行,并且配置差异尽可能少。这里的目标是告诉 .Net “永远不要转换查询字符。始终将它们全部作为 Unicode 的 CLOB 传递。” 我怎样才能做到这一点?