[系統] OCI操作Oracle中文亂碼問題

作者: humanfly (laguna@HEADSHOT)   2016-01-30 11:41:25
資料庫名稱: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加什麼?
感謝。
作者: erho (ptt訪客)   2016-02-19 16:51:00
檢查傳輸字串中文碼是否為BIG5碼,可能傳送的中文碼是UTF-8

Links booklink

Contact Us: admin [ a t ] ucptt.com