新聞中心
如何查看和修改Oracle數據庫服務器端的字符集?
A、oracle server 端字符集查詢
網站建設哪家好,找創(chuàng)新互聯(lián)!專注于網頁設計、網站建設、微信開發(fā)、小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了邢臺縣免費建站歡迎大家使用!
select userenv('language') from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字符顯示形式
B、查詢oracle client端的字符集
$echo $NLS_LANG
如果發(fā)現(xiàn)你select 出來的數據是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數據庫中的數據存在問題,或者是oracle服務端的配置存在問題。
C、server端字符集修改
將數據庫啟動到RESTRICTED模式下做字符集更改:
SQL conn /as sysdba ?Connected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
如果發(fā)現(xiàn)你select 出來的數據是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數據庫中的數據存在問題,或者是oracle服務端的配置存在問題。
.?1.oracle server端字符集查詢? ? ? ? 復制代碼代碼如下:? ? select userenv('language') from dual;? ? server字符集修改:? ? 將數據庫啟動到RESTRICTED模式下做字符集更改:??
oracle10g服務器端是安裝在AIX 6.0系統(tǒng)上,客戶端是安裝在windows server 2008 系統(tǒng)上,客戶端與服務器已成功連接,但是數據庫表里的中文字無法顯示,顯示為“?”,用SQLPLUS查得服務器端的字符集為AL16uTF16,如何修改該字符集使之支持中文呢?另外oracle10G客戶端的字符集需不需要設置,如何查看和設置呢?
詳細介紹oracle數據庫字符集
一 什么是oracle字符集
Oracle字符集是一個字節(jié)數據的解釋的符號集合 有大小之分 有相互的包容關系 ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲 處理 檢索數據 它使數據庫工具 錯誤消息 排序次序 日期 時間 貨幣 數字 和日歷自動適應本地化語言和平臺
影響oracle數據庫字符集最重要的參數是NLS_LANG參數 它的格式如下:
NLS_LANG = language_territory charset
它有三個組成部分(語言 地域和字符集) 每個成分控制了NLS子集的特性 其中:
Language 指定服務器消息的語言 territory 指定服務器的日期和數字格式 charset 指定字符集 如:AMERICAN _ AMERICA ZHS GBK
從NLS_LANG的組成我們可以看出 真正影響數據庫字符集的其實是第三部分 所以兩個數據庫之間的字符集只要第三部分一樣就可以相互導入導出數據 前面影響的只是提示信息是中文還是英文
二 如何查詢Oracle的字符集
很多人都碰到過因為字符集不同而使數據導入失敗的情況 這涉及三方面的字符集 一是oracel server端的字符集 二是oracle client端的字符集;三是dmp文件的字符集 在做數據導入的時候 需要這三個字符集都一致才能正確導入
查詢oracle server端的字符集
有很多種方法可以查出oracle server端的字符集 比較直觀的查詢方法是以下這種:SQLselect userenv( language ) from dual;
結果類似如下:AMERICAN _ AMERICA ZHS GBK
如何查詢dmp文件的字符集
用oracle的exp工具導出的dmp文件也包含了字符集信息 dmp文件的第 和第 個字節(jié)記錄了dmp文件的字符集 如果dmp文件不大 比如只有幾M或幾十M 可以用UltraEdit打開( 進制方式) 看第 第 個字節(jié)的內容 如 然后用以下SQL查出它對應的字符集:
SQL select nls_charset_name(to_number( xxxx )) from dual;
ZHS GBK
如果dmp文件很大 比如有 G以上(這也是最常見的情況) 用文本編輯器打開很慢或者完全打不開 可以用以下命令(在unix主機上):
cat exp dmp |od x|head |awk {print $ $ } |cut c
然后用上述SQL也可以得到它對應的字符集
查詢oracle client端的字符集
這個比較簡單 在windows平臺下 就是注冊表里面相應OracleHome的NLS_LANG 還可以在dos窗口里面自己設置 比如:
set nls_lang=AMERICAN_AMERICA ZHS GBK
這樣就只影響這個窗口里面的環(huán)境變量
在unix平臺下 就是環(huán)境變量NLS_LANG
$echo $NLS_LANG
AMERICAN_AMERICA ZHS GBK
如果檢查的結果發(fā)現(xiàn)server端與client端字符集不一致 請統(tǒng)一修改為同server端相同的字符集
三 修改oracle的字符集
上文說過 oracle的字符集有互相的包容關系 如us ascii就是zhs gbk的子集 從us ascii到zhs gbk不會有數據解釋上的問題 不會有數據丟失 在所有的字符集中utf 應該是最大 因為它基于unicode 雙字節(jié)保存字符(也因此在存儲空間上占用更多)
一旦數據庫創(chuàng)建后 數據庫的字符集理論上講是不能改變的 因此 在設計和安裝之初考慮使用哪一種字符集十分重要 根據Oracle的官方說明 字符集的轉換是從子集到超集受支持 反之不行 如果兩種字符集之間根本沒有子集和超集的關系 那么字符集的轉換是不受oracle支持的 對數據庫server而言 錯誤的修改字符集將會導致很多不可測的后果 可能會嚴重影響數據庫的正常運行 所以在修改之前一定要確認兩種字符集是否存在子集和超集的關系 一般來說 除非萬不得已 我們不建議修改oracle數據庫server端的字符集 特別說明 我們最常用的兩種字符集ZHS GBK和ZHS CGB 之間不存在子集和超集關系 因此理論上講這兩種字符集之間的相互轉換不受支持
修改server端字符集(不建議使用)
在oracle 之前 可以用直接修改數據字典表props$來改變數據庫的字符集 但oracle 之后 至少有三張系統(tǒng)表記錄了數據庫字符集的信息 只改props$表并不完全 可能引起嚴重的后果 正確的修改方法如下:
$sqlplus /nolog
SQLconn / as sysdba;
若此時數據庫服務器已啟動 則先執(zhí)行SHUTDOWN IMMEDIATE命令關閉數據庫服務器 然后執(zhí)行以下命令:
SQLSTARTUP MOUNT;
SQLALTER SYSTEM ENABLE RESTRICTED SESSION;
SQLALTER SYSTEM SET JOB_QUEUE_PROCESSES= ;
SQLALTER SYSTEM SET AQ_TM_PROCESSES= ;
SQLALTER DATABASE OPEN;
SQLALTER DATABASE CHARACTER SET ZHS GBK;
SQLALTER DATABASE national CHARACTER SET ZHS GBK;
SQLSHUTDOWN IMMEDIATE;
SQLSTARTUP
修改dmp文件字符集
上文說過 dmp文件的第 第 字節(jié)記錄了字符集信息 因此直接修改dmp文件的第 第 字節(jié)的內容就可以 騙 過oracle的檢查 這樣做理論上也僅是從子集到超集可以修改 但很多情況下在沒有子集和超集關系的情況下也可以修改 我們常用的一些字符集 如US ASCII WE ISO P ZHS CGB ZHS GBK基本都可以改 因為改的只是dmp文件 所以影響不大
具體的修改方法比較多 最簡單的就是直接用UltraEdit修改dmp文件的第 和第 個字節(jié) 比如想將dmp文件的字符集改為ZHS GBK 可以用以下SQL查出該種字符集對應的 進制代碼:
SQL select to_char(nls_charset_id( ZHS GBK ) xxxx ) from dual;
然后將dmp文件的 字節(jié)修改為 即可
lishixinzhi/Article/program/Oracle/201311/17875
oracle如何查看客戶端的字符集?
查看數據庫字符集,涉及三方面的字符集:
查詢oracle server端的字符集 :比較直觀的查詢方法是以種:?SQLselectuserenv(‘language’) from dual;?結果類似如下:AMERICAN _ AMERICA. ZHS16GBK?
如何查詢dmp文件的字符集 :用oracle的exp工具導出的dmp文件也包含了字符集信息,dmp文件的第2和第3個字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有 幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節(jié)的內容,如0354,然后用以下SQL查出它對應的字符集:?SQL select nls_charset_name(to_number('0354','xxxx')) from dual;?如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機上):?cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6 ,然后用上述SQL也可以得到它對應的字符集。?
查詢oracle client端的字符集:在windows平臺下,就是注冊表里面相應OracleHome的NLS_LANG。還可以在dos窗口里面自己設置,比如:set nls_lang=AMERICAN_AMERICA.ZHS16GBK ,這樣就只影響這個窗口里面的環(huán)境變量。?在unix平臺下,就是環(huán)境變量NLS_LANG。
oracle數據庫里面怎么查看字符集
1、查詢Oracle Server端的字符集:
有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:
SQLselect userenv(‘language’) from dual;
結果如下:AMERICAN _ AMERICA. ZHS16GBK。
2、查詢dmp文件的字符集:
用Oracle的exp工具導出的dmp文件也包含了字符集信息,dmp文件的第2和第3個字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節(jié)的內容,如0354,然后用以下SQL查出它對應的字符集:
SQL select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
3、查詢Oracle client端的字符集:
這個比較簡單。在Windows平臺下,就是注冊表里面相應OracleHome的NLS_LANG。還可以在Dos窗口里面自己設置,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
如果檢查的結果發(fā)現(xiàn)Server端與Client端字符集不一致,請統(tǒng)一修改為同Server端相同的字符集。
文章題目:如何看oracle字符集 oracle 字符集查看
路徑分享:http://fisionsoft.com.cn/article/hpcocp.html