C#写入Oracle 中文乱码问题

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

具体问题描述是这样的:

我可以读取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 中文乱码问题

时间: 2024-08-24 19:04:20

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

写入MySQL中文乱码问题

相信使用数据库进行存储的大家都遇到过中文乱码问题,如何彻底解决?我百度了很多资料与博客,想把自己的经历总结起来给大家参考一下,接下来我先罗列一下大部分修改乱码问题的方法: 1.   修改MySQL数据库的整体编码 引用自:http://www.cnblogs.com/24la/p/update-mysql-default-character.html 查看方式数据库编码: show variables like 'character%'; 该图是复制的(我的已经改好了) 出现上图情况时,可以进行

Oracle中文乱码解决办法总结

AMERICAN_AMERICA.WE8ISO8859P1,这个字符编码是西欧字符编码,对应于.Net的就是iso-8859-1字符编码,所以只需要改到系统的默认字符编码就行了. 解决方法: (1) 服务器端重新安装ORACLE 在重新安装ORACLE 时选择与原卸出数据一致的字符集(本例为US7ASCII). 加载原卸出的数据. 这种情况仅仅使用于空库和具有同一种字符集的数据. (2) 写一个函数: 代码如下 复制代码 /**//// <summary> /// 将西欧字符编码转换成GB23

linux安装Oracle中文乱码问题汇总

解决oracle中文显示乱码有三层地方需要调整或者修改 第一层:操作系统层 1.首先查看linux是否有安装中文字符集, locale -a 2.设置用户的中文字符集 查看到linux安装了中文字符集,那么oracle用户下面要设置中文字符集 vi /etc/locale.conf # centos7是这个配置文件,有的linux是这个配置文件/etc/sysconfig/i18n LANG="zh_CN.UTF-8" 上面的那种方法设置完后,系统所有用户的字符集都是UTF-8.也可以

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

用OracleDataAccess.dll访问oracle数据库,遇到中文乱码的情况. 解决方案如下: 1查看字符集编码, 在数据库服务器端 启动 sqlplus SQL->select userenv('language') from dual 查询结果如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2 在系统的环境变量里面加了个NLS_LANG值也是SIMPLIFIEDCHINESE_CHINA.ZHS16GBK 3 如果不进行第二步,在程序启动时调用以下代码亦可实现

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

以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找了下,然后解决完后就不了了之了,这次又碰到此类问题,所以就认真下来花点时间去测试了一番,经过一些测试,现在已经解决了问题,现在把自己遇到的问题和解决方法记录一下,方便自己日后查找. 测试环境如下: 测试平台: VMware? Workstation 9.0.2 build-1031769 (注:VM

Linux环境解决Oracle 中文乱码

linux下Oracle显示中文乱码 1.Oracle数据库出现乱码的原因:操作系统与服务器一致,但客户端与服务器字符集不一致客户端与服务器一致,但操作系统与服务器不一致2.解决办法:设置相关的字符集,保证操作系统.客户端.数据库服务器,保证这三者的字符集都相同.3.针对情况:设置客户端的字符集与服务器一致,假如服务器的字符集为:UTF8(建议创建数据库的时候用这个字符集,中英文都能兼容) 1)查看操作系统字符集 # locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN

oracle中文乱码问题

Windows下,使用plsql插入中文数据出现乱码问题,上网查了下解决方法,使用下面方法解决了乱码问题,整理如下: 中文乱码就是编码不统一所导致的了,解决办法只需要把编码统一下即可解决了 此种情况最大的可能就是客户端和服务器端的编码不一致,解决方法如下 1. 查看服务器端编码select userenv('language') from dual; 2. 执行语句 select * from V$NLS_PARAMETERS 查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的

Linux Oracle 中文乱码解决

1.Linux操作系统Oracle11g设置别名的时候发现中文乱码 2.直接修改环境变量 添加 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 3.执行命令使环境变量生效 source .bash_profile 4.查看字符集是否已生效 5.再次执行命令,看是否还是乱码,问题解决 原文地址:https://www.cnblogs.com/gw666/p/9546727.html

32位PLSQL连接64位oracle中文乱码

项目中用到了64位oracle,但是当时本地用的是32位PLSQL,因此PLSQL中一直显示的中文都是乱码,开始以为是数据库问题,后经查证数据库没有问题,网上搜了一下午,终于得到答案了.原来需要在PLSQL文件夹中新建一个bat文件,内容如下 @echo off set path=G:\app\Administrator\product\11.2.0\client_1 set ORACLE_HOME=G:\app\Administrator\product\11.2.0\client_1 set