oracle客户端更新中文

问题遇到的现象和发生背景

公司给客户更换新的服务器,原服务器是server200864位(装有oracle11g32位客户端),新服务器是server2012 64位(装有oracle10g32位客户端),服务器会上传数据给客户的oracle数据库。

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容

新装服务器上传给客户的数据汉字变成了??。

我的解答思路和尝试过的方法

分析认为是字符集不一致,用oracle10g的安装程序卸载10g后,拷贝旧服务器上oracle11g的安装包到新服务器上安装(新旧服务器注册表中的字符集一致)仍然不行,注册表字符集改为跟客户服务器一致也不行。少量的几个特殊字符我用 select ascii('') from dual 的方法找到对应的ASCII码,然后在sql语句里面 拼接 chr() 来实现插入特殊字符的。汉字的字符串有没有可以在C#中转换某个编码,然后在oracle中有对应的函数将他转换成对应的汉字字符串?

我想要达到的结果

能上传特殊字符和汉字到客户oracle数据库中。

字符集都查看了吗一致?

-- 服务端字符集
select userenv(’language‘) from dual;
select * from nls_database_parameters;
-- 客户端字符集
select * from nls_instance_parameters
-- 会话字符集
select * from nls_session_parameters

再比对下两台机器cmd的字符集

chcp

不知道和我几年前遇到的是否一样,开发的程序用一些比较新的数据库工具查询读取中文都是??,改字符集啥的都没用,只能通过oedb驱动的方式调用 需要安装一个驱动插件,估计是数据库版本不同导致的问题 新的读取老的就会变成问号

不止要看数据库的字符集 表的字符集也要看一下,建表语句里面是不是另外设定了字符集

1.查数据库字符集

select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

2.乱码主要与客户端环境变量中设置的字符集和程序代码的字符集不一致有关,与数据库的字符集关系不大
先确认你C#程序用的字符集是什么,
比如是GBK,那么配置一下C#程序运行的服务器上的,环境变量

NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

如果是UTF8,那么环境变量设置成

NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8

需要安装一个驱动插件

NLS_LANG 与客户端os字符集要保持一致。
为了减少翻译开销,最好“服务端字符集”,“客户端os字符集”和NLS_LANG,3者保持一致。