這個問題是我剛踏入工作覺得最坑的乙個問題,找了很多方法、也問過不少人,但還是沒能解決,偶然間返現了新大陸....
具體問題描述是這樣的:
我可以讀取oracle資料庫中已有的中文內容,並能正確顯示(oracle中的中文通過sqlplus錄入),但當我使用c#程式插入中文記錄時,發現資料庫中顯示為亂碼,讀取出來也為亂碼。我試了很多種編碼方式,問題都不能解決。
以下是查詢相關資料得到的解決辦法:
主要問題是: oracle客戶端軟體的字元編碼與伺服器端的字元編碼不一致造成的
。oracle的字元編碼為 zhs16gbk
c#中encoding.default為"gb2312"
oracle服務端字元編碼為: zhs16gbk
oracle客戶端字元編碼為: we8iso8859p1
解決辦法有三種:
(1)修改客戶端登錄檔: 找到oracle安裝註冊項下的nls_lang,將其值改為"simplified chinese_china.zhs16gbk
(2)通過呼叫_putenv函式,在程式中用**設定:
using system.runtime.interopservices;
...[dllimport("msvcrt.dll")]
private static extern int _putenv(string str);
..._putenv("nls_lang = simplified chinese_china.zhs16gbk");
//資料庫操作
_putenv("nls_lang = american_amrica.we8iso8859p1");
(3)通過c#自帶的函式設定環境變數
system.environment.setenvironmentvarible("nls_lang "," simplified chinese_china.zhs16gbk");
//資料庫操作
system.environment.setenvironmentvarible("nls_lang ","american_amrica.we8iso8859p1");
需要注意的是: 第
二、三種利用函式進行設定環境變數的操作必須在資料庫操作的外邊才能生效。
發現參加工作之後,自己慢慢的喜歡上了,隔幾天就習慣性都進去看一看,看到對自己有幫助的就立馬給收藏了,碰到有疑問的也會大膽的提出質疑,這裡真的是個好平台,是程式設計師
的又乙個施展空間。在這可以碰到很多的大神、屌絲或牛b的人物,我希望能同大家一起成長!廢話不多少,學習的點點滴滴,都值得與大家分享!
Oracle中文亂碼問題
select userenv language from dual 實際檢視到的結果為 simplified chinese china.al32utf8 檢視第一行中parameter項中為nls language 對應的value項中是否和第一步得到的值一樣。如果不是,需要設定環境變數.否則pl...
hibernate mysql寫入中文亂碼 解決
啟動hibernate專案,自動建立表,插入資料之後發現寫入表裡的資料裡的中文是亂碼。按如下方法解決了 修改資料庫的字符集為utf 8,這個可以通過mysql的客戶端軟體裡右鍵要修改的資料庫的屬性更改。修改client預設字符集為utf8。windows下在mysql安裝目錄 我的計算機作業系統是w...
mysql寫入中文亂碼
亂碼可謂是程式猿的常見問題了,下面就大致介紹幾種常見的情況。常見於頁面 前台到後台傳值 寫入到資料庫這三個方面。頁面相對是最為容易解決的,往往是在相應的jsp頁面或者html頁面設定相關的字符集即可。如 在傳值過程中,也是亂碼出現的頻繁地。先不說到底是什麼場景了,通常常用的方案有如下幾個 配置指定的...