首页 > 解决方案 > 使用流利的 Nhibernate 插入时,Oracle DB 法语字符将替换为垃圾值

问题描述

我正在使用 Fluent Nhibernate 来管理数据库活动。当我尝试使用流利的 Nhibernate 在 Oracle DB 中插入法语字符时,一些字符被垃圾值替换。

例如:- "général" 转换为 "general" 或 "g?n?ral"

列的数据类型是NVARCHAR2

NLS_CHARACTERSET=US7ASCII

NLS_NCHAR_CHARACTERSET=AL16UTF16.

当我直接在 plsql 中执行下面的查询时,它会插入正确的值。

update table_name set test_col=N'général' where id='1';
  1. 如何在 C# 中以流利的 Nhibernate 执行此查询?

  2. 有没有其他解决方案可以在 Oracle 数据库中插入特殊的法语字符?

标签: c#oracleplsqlfluent-nhibernate

解决方案


我假设您正在使用 ODP.NET 提供程序 ( OracleDataClientDriver : Oracle.DataAccess)。在这种情况下,您的NLS_LANG环境变量的值是多少?

很可能它没有定义,Oracle 将其默认为AMERICAN_AMERICA.US7ASCII. 但是US7ASCII不支持任何重音字符。使用支持它们的字符集,例如AL32UTF8orWE8ISO8859P1WE8MSWIN1252等。

如果您使用NHibernate.Driver.OracleClientDriver驱动程序,则应更改为其他驱动程序之一,因为 baseSystem.Data.OracleClient已被弃用多年。


推荐阅读