一直知道oracle有字符集的问题,但以前安装oralce基本都直接选择了gbk的字符集,所以没碰到过问题,直到这次遇到一个客户坚持要求使用us7ascii的字符集,才被折腾了一番。

基本环境如下:

数据库服务器:windows 2003 sp2中文版 + oracle 10g (us7ascii)

应用服务器:iis7 + .net 3.5

问题如下:

1。无法正常存取中文,数据库字段设置为nvarchar也不行。

解决方法:采用指定参数类型的方式可解决(前提:数据库和客户端的字符集必须一直,客户端操作系统可不同)

            OracleConnection con = new OracleConnection(conString);con.Open();OracleCommand cmd = con.CreateCommand();cmd.CommandText = "insert into test values(6,:vc,:nvc)";OracleParameter p1 = new OracleParameter("vc", OracleType.VarChar);OracleParameter p2 = new OracleParameter("nvc", OracleType.NVarChar);p1.Value = "中";p2.Value = "中";cmd.Parameters.Add(p1);cmd.Parameters.Add(p2);cmd.ExecuteNonQuery();

上述代码中,nvc的中 可以正常显示,当然数据库中字段必须为nvarchar

2。某些不方便指定参数类型的情况下:

            System.Environment.SetEnvironmentVariable("ORA_NCHAR_LITERAL_REPLACE", "TRUE");conString = "...";OracleConnection con = new OracleConnection(conString);  con.Open();OracleCommand cmd = con.CreateCommand();cmd.CommandText = "insert into test values(3,N'中文测试',N'中文测试')";cmd.ExecuteScalar();

奥妙就在第一句

System.Environment.SetEnvironmentVariable("ORA_NCHAR_LITERAL_REPLACE", "TRUE");

这句代码设置了环境变量:ORA_NCHAR_LITERAL_REPLACE的值,此值得默认值为false,表示任何从客户端传过来的NCHAR类型的字符先转换为数据库字符集,再转换为国家数据库字符集,而把该参数设为true后,从客户端传过来的NCHAR类型的字符直接转换为国家字符集存储,因此要想正确存储NCHAR字符集,必须得把该参数设为TRUE。

3。Oracle SQL Developer中如何插入中文

找到{ORACLE_HOME}\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf(依赖于你的Oracle SQL Developer安装路径),添加一行配置:

AddVMOption -Doracle.jdbc.convertNcharLiterals=true

同时在中文字符串前添加“N”前缀:

insert into test values(3,N'中文测试',N'中文测试')

c#对使用US7ASCII的oracle存取中文的问题相关推荐

  1. python读取us7ascii字符集Oracle数据库中文乱码问题的解决方案

    python读取us7ascii字符集Oracle数据库中文乱码问题的解决方案 参考文章: (1)python读取us7ascii字符集Oracle数据库中文乱码问题的解决方案 (2)https:// ...

  2. C#处理读取使用US7ASCII的oracle数据库中文显示乱码问题

    方式一:(推荐)Oracle Data Access Components (ODAC) +OleDbConnection 该方式无需配置环境变量 1.下载ODAC 组件,地址为https://www ...

  3. 解决SQL适配器连接到字符集为US7ASCII的Oracle数据库的中文乱码问题

    在使用xDBC连接到字符集为US7ASCII的Oracle数据库时,大家可能遇到过中文的乱码问题,尤其是使用Oracle自己的xDBC驱动的时候. 字符集为US7ASCII的Oracle数据库虽然可以 ...

  4. 著名的Oracle公司中文名字为什么叫“甲骨文”?

    2002年04月26日Oracle宣布,正式启用"甲骨文"作为公司的中文注册商标,进一步完善公司在中国市场的企业识别系统,全面诠释Oracle对日新月异的中国市场的高度重视. &q ...

  5. Qt向Oracle插入中文乱码问题的解决方案

    Qt向Oracle插入中文乱码问题的解决方案 常见问题 Q: 当服务器字符集为US7ASCII时,会发现无论是读取中文还是写入中文都是? A: 这是由于Qt默认的字符编码是utf8,而US7ASCII ...

  6. oracle中dlink使用,Oracle,MetaLink,中文使用指南

    Oracle MetaLink中文使用指南 出版日期:2003年8月 简介 本文概述并解释了如何运用Oracle 的支持服务(简称OSS)进行有效的工作,以及如何利用OSS 所提供的工具和流程使投资回 ...

  7. jsp mysql utf8_jsp操作mysql存取中文乱码

    jsp操作mysql存取中文乱码 关注:148  答案:3  mip版 解决时间 2021-01-18 15:23 提问者 侑點尐悲伤 2021-01-17 18:03 如题:jsp间中文参数传递得到 ...

  8. oracle排序非英文最后,Oracle中中文、数字,英文混杂形式的字段进行排序的方法...

    http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...

  9. oracle登录账号和密码,oracle 登录账号与密码oracle按照中文排序

    oracle按照中文排序 在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: www.2cto.com 按中文拼音进行排序:SCHINESE_PINY ...

最新文章

  1. 简单分析Flask 数据库迁移详情
  2. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
  3. Python常用模块之time模块
  4. SVG 动画实现弹性的页面元素效果
  5. iops 条带深度 队列深度 NCQ
  6. Linux内核的裁剪和移植
  7. Android 系统(231)--OTA对要发布的编译版本进行签名
  8. [转载] Python3 * 和 ** 运算符
  9. python seaborn_Python数据分析之Seaborn(回归分析绘图)
  10. Telink BLE SIG Mesh GATT 配网功能
  11. 吉他音阶训练——问题解答
  12. iis10 asp 如何连接mdb_看我如何恢复被MaMoCrypt勒索软件加密的数据
  13. ffmpeg视频裁剪
  14. Java模拟账户---关键字this
  15. BP神经网络实现实例1曲线拟合
  16. 机械键盘各类轴的区别
  17. LeetCode 981. 基于时间的键值存储 / 274. H 指数 / 275. H 指数 II
  18. 智慧公厕系统为管理方提供更丰富的管理手段
  19. JSON学习(一)——了解JSON
  20. 如何阅读matlab项目并调试运行成,【转】读书笔记:MATLAB

热门文章

  1. 【Python常用函数合集】clip函数、range函数等
  2. 添加系统报警短信或邮箱 需要集中配置
  3. Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)
  4. 【疑难解决】通过网页访问EasyDSS报错出现“无法访问此网站”提示的排查过程
  5. 详解minigui图片加载及显示
  6. PTA1003 python3
  7. 手机DIY自制现身南瓜网
  8. arch模型的思路_ARCH模型的应用
  9. 方法finalizer()的应用
  10. uniapp 获取商米本机SN码