作者humanfly (laguna@HEADSHOT)
看板Database
标题[系统] OCI操作Oracle中文乱码问题
时间Sat Jan 30 11:41:25 2016
资料库名称:Oracle
资料库版本:11.2g 64bit
作业平台:windows
问题描述:
目前用C++使用OCI控制oracle,发现新增的varchar中文都会变乱码
oracle server部分确定 NLS_LANG是 TRADITIONAL CHINESE_TAIWAN.ZHT16MS950
目前测试结果:
1.在client端设定环境变数 NLS_LANG TRADITIONAL CHINESE_TAIWAN.ZHT16MS950
会正常,但不是我要的,且我想要能立即切换的solution。
2.把程式丢到server安装目录的bin会正常,後来测试完是放了一个oracle.key的档案
就会好,里面描述了机码中nlc_lang的位置,但我希望使用者不用安装server
或OracleClient,且同上一点,也不太想用改机码的方式调整。
3.参照这篇:
https://docs.oracle.com/cd/A84870_01/doc/server.816/a76966/ch2.htm
似乎还有两招优先权比环境变数高
(A) Explicitly set in SQL functions
(B) Set by an ALTER SESSION statement
目前试过B,在连线後,执行SQL
我试着在 连线後,insert前执行以下SQL都看不太出效果
"ALTER SESSION SET NLS_LANGUAGE = 'TRADITIONAL CHINESE_TAIWAN'"
or
"ALTER SESSION SET NLS_LANGUAGE = 'TRADITIONAL CHINESE'"
"ALTER SESSION SET NLS_CHARACTERSET = 'ZHT16MSWIN950'"
等皆无效。
不知是否有人能提供 对本次连线明确指定字符集的方式呢?
或是 (A) 应该在SQL加什麽?
感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.198.208
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1454125289.A.0E7.html
1F:→ erho: 检查传输字串中文码是否为BIG5码,可能传送的中文码是UTF-8 02/19 16:51