这个问题是我刚踏入工作觉得最坑的一个问题,找了很多方法、也问过不少人,但还是没能解决,偶然间返现了新大陆....

具体问题描述是这样的:

我可以读取Oracle数据库中已有的中文内容,并能正确显示(Oracle中的中文通过SQLplus录入),但当我使用C#程序插入中文记录时,发现数据库中显示为乱码,读取出来也为乱码。我试了很多种编码方式,问题都不能解决。

以下是查找相关资料得到的解决办法:

主要问题是: oracle客户端软件的字符编码与服务器端的字符编码不一致造成的。

oracle的字符编码为 ZHS16GBK
C#中Encoding.Default为"GB2312"
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");

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

发现参加工作之后,自己慢慢的喜欢上了博客园,隔几天就习惯性都进去看一看,看到对自己有帮助的就立马给收藏了,碰到有疑问的也会大胆的提出质疑,这里真的是个好平台,是程序员

的又一个施展空间。在这可以碰到很多的大神、屌丝或牛B的人物,我希望能同大家一起成长!废话不多少,学习的点点滴滴,都值得与大家分享!

C#写入Oracle 中文乱码问题的更多相关文章

  1. cx_oracle访问处理oracle中文乱码问题

    cx_oracle访问处理oracle中文乱码问题 问题描述 使用docker打包了centos镜像,编码为gbk,随后访问oracle出现了很多乱码.其原因自然是因为编码不一致,服务器为zhs16g ...

  2. asp.net oracle 中文乱码 解决方法

    asp.net oracle 中文乱码 解决方法 不需要去修改oracle以及client的字符集,只需要在web.config中连接字符串上加上 Unicode=True 问题解决. <add ...

  3. 写入MySQL中文乱码问题

    相信使用数据库进行存储的大家都遇到过中文乱码问题,如何彻底解决?我百度了很多资料与博客,想把自己的经历总结起来给大家参考一下,接下来我先罗列一下大部分修改乱码问题的方法: 1.   修改MySQL数据 ...

  4. C# 读取oracle 中文乱码的解决方案

    用OracleDataAccess.dll访问oracle数据库,遇到中文乱码的情况. 解决方案如下: 1查看字符集编码, 在数据库服务器端 启动 sqlplus SQL->select use ...

  5. 解决Linux下Oracle中文乱码的一些心得体会 ,转自

    以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找 ...

  6. C# 使用System.Data.OleDb;避免oracle中文乱码问题

    首先,需要保证oracle客户端服务器的字符集是一样的,并且保证该字符集支持中文.你可以使用plsql查看是否乱码. 代码: using System; using System.Collection ...

  7. Oracle中文乱码解决办法总结

    AMERICAN_AMERICA.WE8ISO8859P1,这个字符编码是西欧字符编码,对应于.Net的就是iso-8859-1字符编码,所以只需要改到系统的默认字符编码就行了. 解决方法: (1) ...

  8. windows 7 64位出现Oracle中文乱码

    提示oracle客户端无法连接指定字符 安装好客户端之后,如图 将数据库dbhome_1中的network文件夹全部复制到客户端,如图 然后在设置环境变量:F:\app\Administrator\p ...

  9. oracle中文乱码解决方法笔记

    我刚刚在linux下安装oracle时就碰到这个问题,查了半天知道问题是oracle的字符集不对. 解决方法是dbca进入图形界面,删去现有的库,重建新库. 建库时注意: 1,dbca创建, 选第一项 ...

随机推荐

  1. Linux连接虚拟机及操作指令

    Linux的安装(虚拟机环境)与基础配置   一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Li ...

  2. fread,fwrite

  3. SQL Server 2016 在Windows Server 2012 R2 上的初步安装与远程连接实战(一):初步配置

    1.安装过程没有什么说头 2.下载并安装SSMS(SQLServer Management Studio),目前已更新到2017.1 3.使用SSMS登陆数据库 第一次选择Windows 身份验证,可 ...

  4. ActiveMQ安装使用与spring整合配置教程

    https://blog.csdn.net/qq_22075041/article/details/77602996

  5. python入门(十四):面向对象(属性、方法、继承、多继承)

    1.任何东西1)属性(特征:通常可以用数据来描述)(类变量和实例变量)2)可以做一些动作(方法) 类来管理对象的数据.属性:类变量和实例变量(私有变量)方法:    1)实例方法    2)类方法   ...

  6. fiddler抓取https请求

    Fiddler抓取https设置详解(图文):https://www.cnblogs.com/joshua317/p/8670923.html Fiddler要抓取到https请求我们还需要Fiddl ...

  7. 认识border

    标签(空格分隔): border border的认识: border:边框的意思,描述盒子的边框,边框有三个要素: 粗细, 线性样式 ,颜色: <!DOCTYPE html> <ht ...

  8. Python数据分析学习(二):Numpy数组对象基础

    1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  9. android 组件隐藏

    参考 https://blog.csdn.net/bbtianshi/article/details/79556609 view.setVisibility(View.GONE);

  10. 获取BDC 消息文本的2种方式

    第一种 LOOP AT MESSTAB. MOVE MESSTAB-MSGNR TO MSGNO. CALL FUNCTION 'WRITE_MESSAGE' EXPORTING MSGID = ME ...