1. 程式人生 > >jdbc操作非中文字符集oracle資料庫導致的中文字元讀寫亂碼的解決方案

jdbc操作非中文字符集oracle資料庫導致的中文字元讀寫亂碼的解決方案

oracle資料庫向來是一個麻煩的資料庫,要不它的DBA怎麼就那麼值錢呢,呵呵。

中文的亂碼問題也是一個比較頭疼的問題,在odbc的連線中,可以通過設定客戶端的字符集(修改登錄檔)來解決中

文問題。而通過jdbc 的thin方式來連線資料庫,就沒那麼容易了。如果資料庫使用的是非中文字符集,往往在處理中

文問題的時候就很頭疼。之所以頭疼,是因為oracle的驅動沒有提供字符集的設定引數,所以在實際使用過程中,程

序系統和資料庫系統中字符集不一致的時候,就會帶來亂碼問題。

通常的做法有兩種:

第一種是在程式中,針對中文字元做顯式的字符集轉換。這種方式是頗不得已而為之的方法,相信大家遇到過很多次

了。

第二種是hack oracle的驅動程式,在底層直接解決,通過給url加字符集引數,然後在驅動底層進行解析,在涉及

String型別操作的地方,在源字符集和目的字符集做相應轉換。這中做法,雖然一勞永逸,但是需要比較深的功力。

另外,反編譯別人的程式碼再做修改,也許不太好吧。不過話又說回來,oracle無情,也不要別怪人無義,^_^。mysql

、sybase、sql server的驅動都提供了字符集的設定引數,為什麼單單oracle沒有呢?

所以,對一、二兩種辦法做個折中,應該是比較好的方案。具體的辦法可以如下:

針對oracle驅動呼叫,做一個代理,需要對ResultSet、Statement、PreparedStatement等介面,在有字串操作方法的地方,對字符集進行轉換。另外,sql中有中文字元,也是需要處理的。

這樣,既不要每次都寫程式轉換,解決一勞永逸的問題,還不影響原有的oracle驅動程式。