c# - 使用流利的 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';
如何在 C# 中以流利的 Nhibernate 执行此查询?
有没有其他解决方案可以在 Oracle 数据库中插入特殊的法语字符?
解决方案
我假设您正在使用 ODP.NET 提供程序 ( OracleDataClientDriver : Oracle.DataAccess
)。在这种情况下,您的NLS_LANG
环境变量的值是多少?
很可能它没有定义,Oracle 将其默认为AMERICAN_AMERICA.US7ASCII
. 但是US7ASCII
不支持任何重音字符。使用支持它们的字符集,例如AL32UTF8
orWE8ISO8859P1
或WE8MSWIN1252
等。
如果您使用NHibernate.Driver.OracleClientDriver
驱动程序,则应更改为其他驱动程序之一,因为 baseSystem.Data.OracleClient
已被弃用多年。
推荐阅读
- vue.js - Vuetify 自动完成链接
- r - 在 data.table 中以编程方式聚合数据
- java - 弹簧启动;我们可以在 Java 枚举中使用 @Value
- c++ - 为什么内存清理程序会报告 std::map 使用了未初始化的值?
- architecture - 服务启动时对其他服务和基础设施的依赖
- javascript - 甚至无法在浏览器中运行代码,因为 localhost 拒绝连接
- amazon-web-services - 在移动设备或 Chrome 隐身模式下,静态 s3 站点会出现 403 错误
- amazon-web-services - AWS Appflow <-> Salesforce 集成
- sql - Oracle SQL在单元格中查找最大位数
- android - Android:从 Firebase 下载的 dex 不起作用:“没有找到 dex 位置的原始 dex 文件”