C#程序写入oracle英文集库乱码的解决方案
DB常用的两种字符集:
英文:SIMPLIFIED CHINESE_CHINA.US7ASCII
中文:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
中文字符集一般用oracle相关驱动读写是正常的,当DB的字符集是英文集:SIMPLIFIED CHINESE_CHINA.US7ASCII的时候会存在中文写入乱码(????)的问题。具体原因如下:
1.确认客户端和服务端的字符集一致。服务端字符集的查看:select userenv('language') from dual;在注册表中可以修改其字符集。客户端字符集的查看和修改在环境变量中
NLS_LANG:SIMPLIFIED CHINESE_CHINA.US7ASCII
NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如果服务端和客户端字符集不一致在plsql等工具中就会出现中文乱码的情况。
2.DB字符集为英文字符集时,C#程序一般用OLEDB连接去访问数据库,这里涉及到两个驱动:
一个是由微软提供provider=MSDAORA.1(MSDAORA)驱动,由于其只支持32位的客户端,具有一定的局限性,要求服务器必须部署oracle32位的客户端才可以正常访问,
尤其要注意的是服务器通常会装载多个oracel客户端,一定程度上会对程序访问数据库形成干扰,因此建议一台服务器只安装一个32位oracle客户端,如果多装的话,环境变量中
只保留一个oracle_home(即应用程序想要访问的那一个oracle_home)。这个驱动读写中英文库支持效果很稳定。还有就是客户端32位与服务端64位是可以并存的。
另一个是provider=OraOLEDB.Oracle是Oracle自带的驱动,对中文字符集(ZHS16GBK)支持很好,对英文字符集(US7ASCII)数据读取无乱码,写入有乱码,并且做为
where条件传进去的中文参数为乱码,优点就是与操作系统位数无关。
连接字符串:
Provider=MSDAORA;Data Source=192.168.19.199/ANESV4EN;Password=medcomm;User ID=medcomm;
Provider=OraOLEDB.Oracle;Data Source=192.168.19.199/ANESV4EN;Password=medcomm;User ID=medcomm;
注意点:1.修改环境变量和注册表记得重启服务器
2.客户端驱动不处理好,改变访问方式无法解决乱码问题(亲测过无需安装客户端和NLSQL等解决方案)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!