一般來說,oracle數據導出spool方式,中文出現亂碼,這情況是因為數據庫服務器和客戶端字符集不匹配,執行sqlplus的機器就是客戶端,服務器和客戶端也可能是一臺機器,執行sqlplus之前要先設置客戶端的字符集,在linux上:export NLS_LANG=.......
為永康等地區用戶提供了全套網頁設計制作服務,及永康網站建設行業解決方案。主營業務為網站設計制作、成都做網站、永康網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
在windows上set NLS_LANG查詢數據庫字符集:select property_value from database_properties where property_name like 'NLS_CHAR%';
1、比如查詢結果是:ZHS16GBK
那你在sqlplus之前要設置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后再登錄sqlplus用spool生成數據
檢查下你導出時候的環境變量,導入時的環境變量
2、比如導出時NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
導入時NLS_LANG沒有設置,或者設置為其他字符集,則導入的庫內漢字就有可能變成亂碼。
解決方法,連接數據庫的時候設置正確字符集即可。
1. 服務器指定字符集與客戶字符集不同,而與加載數據字符集一致。
解決方法:對于這種情況,只需要設置客戶端字符集與服務器端字符集一致就可以了,具體操作如下:
* 查看當前字符集:
SQL select * from sys.props$
2 WHERE NAME=‘NLS_CHARACTERSET’;
NAME value$
NLS_CHARACTERSET ZHS16GBK
可以看出,現在服務器端Oracle數據庫的字符集為‘ZHS16GBK’
* 根據服務器的字符集在客戶端作相應的配置或者安裝Oracle的客戶端軟件時指定:
如果還沒安裝客戶端,那么在安裝客戶端時,指定與服務器相吻合的字符集即可;如果已經安裝好了客戶端,并且客戶端為 sql*net 2.0 以下版本,進入Windows的系統目錄,編輯oracle.ini文件,用US7ASCII替換原字符集,重新啟動計算機,設置生效;否則,如果,客戶端為 sql*net 2.0 以上版本,在Win98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇SOFTWARE, 第三步選擇 Oracle, 第四步選擇 NLS_LANG, 鍵 入 與服 務 器 端 相 同 的 字 符 集
(本例為:HKEY_LOCAL_MACHINE/
SOFTWARE/ORACLE/NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。
如果是UNIX客戶端,則:
SQL conn / as sysdba
Connected.
SQL SQL UPDATE sys.PROPS$ SET value$=‘SIMPLIFIED CHINESE’
2 WHERE NAME=‘NLS_LANGUAGE’;
2. 服務器指定字符集與客戶字符集相同,與加載數據字符集不一致。
解決方法:強制加載數據字符集與服務器端字符集一致。要做到這一點,可以通過重新創建數據庫,并選擇與原卸出數據一致的字符集,然后IMP數據,這種情況僅僅適用于空庫和具有同一種字符集的數據。
解決這類問題,也可以先將數據加載到具有相同字符集的服務器上,然后用轉換工具卸出為foxbase 格式或access格式數據庫,再用轉換工具轉入到不同字符集的Oracle數據庫中,這樣就避免了Oracle字符集的困擾。目前數據庫格式轉換的工具很多,像power builder5.0以上版本提供的pipeline及Microsoft Access數據庫提供的數據導入/導出功能等。
3. 服務器指定字符集與客戶字符集不同,與輸入數據字符集不一致。
對于這種情況,目前為止都還沒有太好的解決方法。
通過上面的了解,我們知道,導致在后期使用數據庫時出現種種關于字符集的問題,多半是由于在數據庫設計、安裝之初沒有很好地考慮到以后的需要,所以,我們完全可以通過在服務器上和客戶端使用相同的字符集來避免由此類問題引出的麻煩
怎樣修改查看Oracle字符集
a.數據庫服務器字符集select * from nls_database_parameters,其來源于props$,是表示數據庫的字符集。
b.客戶端字符集環境select * from nls_instance_parameters,其來源于v$parameter,
表示客戶端的字符集的設置,可能是參數文件,環境變量或者是注冊表
c.會話字符集環境 select * from nls_session_parameters,其來源于v$nls_parameters,表示會話自己的設置,可能是會話的環境變量或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。
客戶端的字符集要求與服務器一致,才能正確顯示數據庫的非Ascii字符。如果多個設置存在的時候,alter session環境變量注冊表參數文件
實際情況
我用select * from nls_database_parameters
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
說明我在創建數據庫時指定的字符集是ZHS16GBK,我用
update sys.props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';
修改了字符集,但插入中文時仍然有問題,這或許就如上面資料所說的通過修改SYS.PROPS$來修改主要是對應客戶端的顯示,與存儲無關,
所以仍舊是亂碼。
然后我重新創建了個數據庫,指定字符集為AL32UTF8,插入中文就沒問題了。
可見我們如果要在數據庫中顯示中文,在創建數據庫時一定喲指定好所用的字符集。
oracle表的partition名亂碼查詢:
1、查看服務器端編碼
Select userenv('language') from dual;
我實際查到的結果為: AMERICAN_AMERICA.UTF8(每人查到的可能不一樣)
2、執行語句 select * from V$NLS_PARAMETERS
查看第一行中PARAMETER項中為NLS_LANGUAGE對應的VALUE項中是否和第一步得到的值一樣。
如果不是,需要設置環境變量。
3、設置環境變量
計算機--屬性-- 高級系統設置-- 環境變量 --系統環境變量--新建
設置變量名:NLS_LANG
變量值:第1步查到的值,AMERICAN_AMERICA.UTF8(以你第一步查到的為準)
分享題目:oracle亂碼怎么設置,oracle命令行亂碼
文章源于:http://m.kartarina.com/article0/hegdio.html
成都網站建設公司_創新互聯,為您提供電子商務、品牌網站建設、服務器托管、品牌網站設計、網站制作、定制網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯