• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
布鲁斯
Your mind breaks the spirit of your soul.
博客园    首页    新随笔    联系   管理    订阅  订阅

C# Oracle 乱码问题解决方案

主要原因:

Oracle客户端的字符集与服务器端不匹配,需要更改客户端(instant client)或者服务器端的字符集

在SQL Developer中查询服务器端的字符集:

select userenv('language') from dual;

结果:

Snap3

因此只要在客户端设置同样的字符集即可。

1. 对于Windows,在用户环境变量中设置NLS_LANG变量即可:

image

2. 对于Linux,在.bash_profile中设置NLS_LANG变量即可:

NLS_LANG = "SIMPLIFIED CHINESE_CHINA.AL32UTF8"

export NLS_LANG

----------------------------------------------------------------------------

oracle服务端字符编码为: ZHS16GBK
oracle客户端字符编码为:  WE8ISO8859P1

解决办法有三种:
(1)修改客户端注册表: 找到Oracle安装注册项下的NLS_LANG,将其值改为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK
(2)通过调用_putenv函数,在程序中用代码设置:
using System.Runtime.InteropServices;
...
[DllImport("msvcrt.dll")]
private static extern int _putenv(string str);
...
_putenv("NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK");
//数据库操作
_putenv("NLS_LANG = AMERICAN_AMRICA.WE8ISO8859P1");
(3)通过C#自带的函数设置环境变量
System.Environment.SetEnvironmentVarible("NLS_LANG "," SIMPLIFIED CHINESE_CHINA.ZHS16GBK");
//数据库操作
System.Environment.SetEnvironmentVarible("NLS_LANG ","AMERICAN_AMRICA.WE8ISO8859P1");

需要注意的是: 第二、三种利用函数进行设置环境变量的操作必须在数据库操作的外边才能生效。

posted @ 2013-03-29 15:12  布鲁斯  阅读(4364)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3