oracle跨資料庫通訊亂碼問題

2021-06-28 07:51:40 字數 1453 閱讀 4836

oracle不同資料庫之間可以通過dblink進行通訊,但是如果兩個資料庫是不同字符集,那麼在獲取中文字元時可能顯示的就是亂碼。

假設:資料庫a字符集為simplified chinese_china.zhs16gbk

下有表aa

資料庫b字符集為american_america.we8iso8859p1

在資料庫b上建立鏈結a的dblink:

create database link test

connect to system identified by password

using 'test';

說明:oracle10g以下版本對密碼大小寫不敏感,除非在設定密碼的時候將密碼加上雙引號,否則大小寫密碼都可以登入系統,11g開始密碼預設區分大小寫,所以在鏈結11g資料庫或者其他異構資料庫時需要將密碼加上雙引號。

現在我們在b庫查詢一下a庫的aa表:

資料是查詢出來了,但是中文部分變成了靠!

沒關係,我們可以通過utl_raw.cast_to_raw函式在a庫將有中文的列轉換為16進製制,為了以後長期使用我們建立乙個檢視:

create view v_aa as

select a1, utl_raw.cast_to_raw(a2) a2 from aa;

查詢一下

select * from v_aa;
在b庫上通過utl_raw.cast_to_varchar2將16進製制再轉換為中文,我們同樣建乙個檢視:

create or replace view v_aa as

select a1, utl_raw.cast_to_varchar2(a2) a2 from v_aa@test;

查詢一下

select * from v_aa;
ok,大功告成!

不過在有些特殊環境下,按這種方法查詢出來的還是亂碼,可能是那個資料庫的字符集比較特殊,我們可以將a庫的字符集先轉換成我們指定的字符集,再轉換成16進製制

如:

select   utl_raw.cast_to_raw( convert('中文123','zhs16cgb231280'))  from dual;

oracle跨資料庫

2.資料庫oracle的誇跨庫連線怎麼弄,要注意什麼 分布式查詢可能一條sql語句中有不同遠端庫的表,相關概念lz可以網上查詢,使用時注意下面幾點。使用collocated內聯檢視 也就是sql要對引用不同遠端庫的表,要組織好,將相同庫的表放一起組織成內聯檢視,這樣oracle就很容易知道這個內聯檢...

跨語種資料庫亂碼

有時候我們要面對跨語種資料庫,比如專業的工控軟體 德國人寫的中國人用 資料庫寫入我們本地文字就會顯示亂碼 資料庫中 但是我們還需要對該軟體做些二次開發。亂碼問題很糾結。現在還是注意資料連線的乙個引數 auto translate true,預設為true,改為false就可以正常顯示了。網上還有辦法...

Oracle跨資料庫查詢

工作中需要從乙個資料庫中的表 gis weichai data 1s 中的資料匯入到另個一資料庫的表 gis weichai data 1s 中,資料庫伺服器都是遠端的 分別為 221.131.228.256 211.161.192.46 我的實現方法是在本地使用 pl sql 操作兩個遠端伺服器,...