一、簡介
oracle 的字符集存在於伺服器端和客戶端,同時字元(包括中英文本元)儲存於資料庫中也是以一定的字符集編碼存放
正常情況下,當伺服器端與客戶端字符集一致,且載入到oracle資料庫的資料字符集與伺服器字符集也一致時,資料方能正常在客戶端進行顯示
1.伺服器字符集可用下面的語句查詢:
select * from v$nls_parameters where parameter like '%characterset';
2.客戶端的字符集在登錄檔或環境變數中指示:
登錄檔:執行regedit,hkey_local_machine->software->oracle->home0->nls_lang
環境變數:nls_lang
3.檢視資料庫中存放的字元編碼(以"中"字為例,16進製制方式顯示):
select '中',dump('中',16) from dual;
二、oracle伺服器進行字符集轉換的規則
oracle伺服器根據客戶端的字符集判斷是否需要在伺服器端進行轉換
1.在做查詢操作時
a.如果客戶端指定的字符集與伺服器端指定的字符集一致,則伺服器端不進行轉換直接將字元編碼傳到客戶端進行解析顯示
b.如果客戶端指定的字符集與伺服器端指定的字符集不一致,剛伺服器端將把字元編碼轉換為客戶端指定的字符集編碼再傳給客戶端進行解析顯示
2.在做exp操作時
a.如果客戶端指定的字符集與伺服器端指定的字符集一致,伺服器不進行轉換直接轉儲為dmp檔案
b.如果客戶端指定的字符集與伺服器端指定的字符集不一致,伺服器將把資料字符集轉換為客戶端指定的字符集進行轉儲
3.在做imp操作進
a.如果轉儲檔案的字符集與伺服器端指定的字符集一致,伺服器不進行轉換直接將轉儲檔案匯入到資料庫中存放
b.如果轉儲檔案的字符集與伺服器端指定的字符集不一致,伺服器將把轉儲檔案的字符集轉換為伺服器端指定的字符集進行存放
三、oracle 9i伺服器字符集修改例項 zhs16gbk -> al32utf8
1.客戶端指定為zhs16gbk字符集,用exp工具將所有使用者資料匯出為轉儲檔案
2.強制轉換字符集,資料庫應該在restricted模式下進行
sqlplus "/ as sysdba"
shutdown immediate
startup mount
alter session set sql_trace=true;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use al32utf8;
--internal_use 用於跳過子集與超集的檢查,如果不加會報錯
--alter system disable restricted session;
shutdown immediate
startup
3.客戶端指定為zhs16gbk字符集,用imp工具將轉儲檔案匯入到資料庫中
asp連線oracle9i資料庫
最近做伺服器配置,作業系統為server2003 xp,程式指令碼語言asp,資料庫為orale9i 問題描述 資料庫連線方式如下 1 ole db provider for oracle from microsoft dim oconn,strconn set oconn server.creat...
資料庫oracle9i的解除安裝
1 開始 設定 控制面板 管理工具 服務 停止所有oracle服務。2 開始 程式 oracle orahome oracle installation products universal installer 卸裝所有oracle產品,但universal installer本身不能被刪除 3 r...
連線Oracle9i,因字符集造成亂碼的解決方法
我們的系統連的是oracle10g的庫,現在做第三方介面,要連oracle 9i,但那邊的庫跟我們的庫不是同一種字符集,就造成了亂碼問題,據說裝9i客戶端,通過9i的客戶端連9i資料庫就可以顯示中文,在dephi裡面是這樣做的,用的provider oraoledb.oracle.1,顯示中文沒問題...