數(shù)據(jù)庫服務(wù)器字符集select * from nls_database_parameters,其來源于props$,是表示數(shù)據(jù)庫的字符集。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、做網(wǎng)站、太康網(wǎng)絡(luò)推廣、小程序開發(fā)、太康網(wǎng)絡(luò)營銷、太康企業(yè)策劃、太康品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供太康建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
客戶端字符集環(huán)境select * from nls_instance_parameters,其來源于v$parameter,
表示客戶端的字符集的設(shè)置,可能是參數(shù)文件,環(huán)境變量或者是注冊表
會話字符集環(huán)境select * from nls_session_parameters,其來源于v$nls_parameters,表示會話自己的設(shè)置,可能是會話的環(huán)境變量或者是alter session完成,如果會話沒有特殊的設(shè)置,將與nls_instance_parameters一致。
客戶端的字符集要求與服務(wù)器一致,才能正確顯示數(shù)據(jù)庫的非Ascii字符。如果多個設(shè)置存在的時候,alter session環(huán)境變量注冊表參數(shù)文件
字符集要求一致,但是語言設(shè)置卻可以不同,語言設(shè)置建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。
涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。
在做數(shù)據(jù)導(dǎo)入的時候,需要這三個字符集都一致才能正確導(dǎo)入。
2.1 查詢oracle server端的字符集
有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:
SQL select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
SQLselect userenv(‘language’) from dual;
AMERICAN _ AMERICA. ZHS16GBK
2.2 如何查詢dmp文件的字符集
用oracle的exp工具導(dǎo)出的dmp文件也包含了字符集信息,dmp文件的第2和第3個字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節(jié)的內(nèi)容,如0354,然后用以下SQL查出它對應(yīng)的字符集:
SQL select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它對應(yīng)的字符集。
2.3 查詢oracle client端的字符集
在windows平臺下,就是注冊表里面相應(yīng)OracleHome的NLS_LANG。還可以在dos窗口里面自己設(shè)置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就只影響這個窗口里面的環(huán)境變量。
在unix平臺下,就是環(huán)境變量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
如果檢查的結(jié)果發(fā)現(xiàn)server端與client端字符集不一致,請統(tǒng)一修改為同server端相同的字符集。
補充:
(1).數(shù)據(jù)庫服務(wù)器字符集
select * from nls_database_parameters
來源于props$,是表示數(shù)據(jù)庫的字符集。
(2).客戶端字符集環(huán)境
select * from nls_instance_parameters
其來源于v$parameter,表示客戶端的字符集的設(shè)置,可能是參數(shù)文件,環(huán)境變量或者是注冊表
(3).會話字符集環(huán)境
select * from nls_session_parameters
來源于v$nls_parameters,表示會話自己的設(shè)置,可能是會話的環(huán)境變量或者是alter session完成,如果會話沒有特殊的設(shè)置,將與nls_instance_parameters一致。
(4).客戶端的字符集要求與服務(wù)器一致,才能正確顯示數(shù)據(jù)庫的非Ascii字符。
如果多個設(shè)置存在的時候,NLS作用優(yōu)先級別:Sql function alter session 環(huán)境變量或注冊表 參數(shù)文件 數(shù)據(jù)庫默認參數(shù)
字符集要求一致,但是語言設(shè)置卻可以不同,語言設(shè)置建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。
1、查詢Oracle Server端的字符集:
有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:
SQLselect userenv(‘language’) from dual;
結(jié)果如下:AMERICAN _ AMERICA. ZHS16GBK。
2、查詢dmp文件的字符集:
用Oracle的exp工具導(dǎo)出的dmp文件也包含了字符集信息,dmp文件的第2和第3個字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節(jié)的內(nèi)容,如0354,然后用以下SQL查出它對應(yīng)的字符集:
SQL select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
3、查詢Oracle client端的字符集:
這個比較簡單。在Windows平臺下,就是注冊表里面相應(yīng)OracleHome的NLS_LANG。還可以在Dos窗口里面自己設(shè)置,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
如果檢查的結(jié)果發(fā)現(xiàn)Server端與Client端字符集不一致,請統(tǒng)一修改為同Server端相同的字符集。
方法1\x0d\x0a查詢該字段,用EXCPTION異常抓取,如果沒異常則說明有該字段,如果進入異常程序塊則說明無該字段\x0d\x0a方法2\x0d\x0aselectcount(column_name)fromALL_TAB_COLUMNSwhereowner='TMU_TMAAS'andtable_name=upper('T_TMAAS_APP_TMZY_CHANGEAPPFORM')andcolumn_name=upper('id')
A、oracle server 端字符集查詢
select userenv('language') from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字符顯示形式
B、查詢oracle client端的字符集
$echo $NLS_LANG
如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。
C、server端字符集修改
將數(shù)據(jù)庫啟動到RESTRICTED模式下做字符集更改:
SQL conn /as sysdba ?Connected.
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫中的數(shù)據(jù)存在問題,或者是oracle服務(wù)端的配置存在問題。
.?1.oracle server端字符集查詢? ? ? ? 復(fù)制代碼代碼如下:? ? select userenv('language') from dual;? ? server字符集修改:? ? 將數(shù)據(jù)庫啟動到RESTRICTED模式下做字符集更改:??
oracle10g服務(wù)器端是安裝在AIX 6.0系統(tǒng)上,客戶端是安裝在windows server 2008 系統(tǒng)上,客戶端與服務(wù)器已成功連接,但是數(shù)據(jù)庫表里的中文字無法顯示,顯示為“?”,用SQLPLUS查得服務(wù)器端的字符集為AL16uTF16,如何修改該字符集使之支持中文呢?另外oracle10G客戶端的字符集需不需要設(shè)置,如何查看和設(shè)置呢?
查看數(shù)據(jù)庫字符集,涉及三方面的字符集:
查詢oracle server端的字符集 :比較直觀的查詢方法是以種:?SQLselectuserenv(‘language’) from dual;?結(jié)果類似如下:AMERICAN _ AMERICA. ZHS16GBK?
如何查詢dmp文件的字符集 :用oracle的exp工具導(dǎo)出的dmp文件也包含了字符集信息,dmp文件的第2和第3個字節(jié)記錄了dmp文件的字符集。如果dmp文件不大,比如只有 幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個字節(jié)的內(nèi)容,如0354,然后用以下SQL查出它對應(yīng)的字符集:?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也可以得到它對應(yīng)的字符集。?
查詢oracle client端的字符集:在windows平臺下,就是注冊表里面相應(yīng)OracleHome的NLS_LANG。還可以在dos窗口里面自己設(shè)置,比如:set nls_lang=AMERICAN_AMERICA.ZHS16GBK ,這樣就只影響這個窗口里面的環(huán)境變量。?在unix平臺下,就是環(huán)境變量NLS_LANG。
當(dāng)前題目:oracle如何查看字符 查看字符集oracle
地址分享:http://chinadenli.net/article26/hghejg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、動態(tài)網(wǎng)站、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)