数据库名称: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加什么?
感谢。