oracle imp字符集問題的解決
原理:ORACLE多國語言設定是為了支援世界範圍的語言與字符集,一般對語言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG欄位的資料的顯示等有效。ORACLE的多國語言設定最主要的兩個特性就是國家語言設定與字符集設定,國家語言設定決定了介面或提示使用的語言種類,字符集決定了資料庫儲存與字符集有關資料(如文字)時候的編碼規則。
ORACLE字符集設定,分為資料庫字符集和客戶端字符集環境設定。在資料庫端,字符集在建立資料庫的時候設定,並儲存在資料庫props$表中,對於8i以上產品,已經可以採用'Alter database character set 字符集'來修改資料庫的字符集,但也僅僅是從子集到超集,不要透過update props$來修改字符集,如果是不支援的轉換,可能會失去所有與字符集有關的資料,就是支援的轉換,也可能導致資料庫的不正常工作。字符集分為單位元組字符集與多位元組字符集,US7ASCII就是典型的單位元組字符集,在這種字符集中length=lengthb,而ZHS16GBK就是常用的雙位元組字符集,在這裡lengthb=2*length。
在客戶端的字符集環境比較簡單,主要就是環境變數或登錄檔項NLS_LANG,注意NLS_LANG的優先順序別為:引數檔案à登錄檔à環境變數àalter session。NLS_LANG的組成為“國家語言設定.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客戶端的字符集最好與資料庫端一樣(國家語言設定可以不一樣,如zhs16gbk的字符集,客戶端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響資料庫字元的正常顯示),如果字符集不一樣,而且字符集的轉換也不相容,那麼客戶端的資料顯示與匯出/匯入的與字符集有關的資料將都是亂碼。
方案:
使用2進位制檔案編輯工具,如uedit32。開啟匯出的dmp檔案,獲取2、3位元組的內容,如00 01,先把它轉換為10進位制數,為1,使用函式NLS_CHARSET_NAME即可獲得該字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道該dmp檔案的字符集為US7ASCII,如果需要把該dmp檔案的字符集換成ZHS16GBK,則需要用NLS_CHARSET_ID獲取該字符集的編號:
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852換成16進位制數,為354,把2、3位元組的00 01換成03 54,即完成了把該dmp檔案字符集從us7ascii到zhs16gbk的轉化,這樣,再把該dmp檔案匯入到zhs16gbk字符集的資料庫就可以了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/73920/viewspace-969051/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於Oracle 9i字符集問題的解決辦法FCOracle
- JDBC Oracle executeUpdate 卡死問題解決JDBCOracle
- 解決Oracle序列跳號問題Oracle
- 關於mysql查詢字符集不匹配問題的解決方法MySql
- oracle exp和impOracle
- Oracle OCP(54):IMPOracle
- 遷移ORACLE資料到MogDB/openGauss時的字符集問題Oracle
- 解決Oracle死鎖問題步驟Oracle
- 使用imp/exp遇到兩個問題
- oracle 使用nullif解決除數為零的問題OracleNull
- ORACLE賬戶提示EXPIRED(GRACE)問題解決Oracle
- Oracle:ORA-27090 問題解決總結Oracle
- django儲存資料到表時,遇到字符集問題--已解決Django
- 【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事項Oracle
- Oracle修改字符集前如何找出可能出現問題的資料?Oracle
- Oracle 錯誤總結及問題解決 ORAOracle
- mysql 字符集造成的效能問題MySql
- Oracle 解決like中無法匹配下劃線的問題Oracle
- PYTHON3 cx-Oracle 字符集 轉換錯誤的解決方案PythonOracle
- Oracle EXPDP自動備份緩慢問題解決Oracle
- 解決 Unexpectedlexicaldeclarationincaseblock的問題BloC
- oracle程式異常中止時登入掛起問題的解決Oracle
- Oracle:sqlplus查詢出的中文是亂碼問題的解決(轉)OracleSQL
- Oracle autotrace 報 SP2-0618 PLUSTRACE role 問題解決Oracle
- 解決 github 訪問不了的問題Github
- 解決github訪問慢的問題Github
- display:flex解決的問題Flex
- 遇到問題的解決方法
- ORACLE RAC中連線ScanIP報錯ORA-12545的問題解決Oracle
- Oracle 字符集修改Oracle
- exp和imp詳解
- oracle資料匯出匯入(exp/imp)Oracle
- 【ASK_ORACLE】由於索引分裂而產生的效能問題的解決方案Oracle索引
- 解決JS跨域訪問的問題JS跨域
- oracle 11.2.0.4 DataGuard Broker配置過程中可能遇到的問題及解決方法Oracle
- 解決線上Oracle連線耗時過長的問題現象RPYBOracle
- but no encoding declared;問題的解決方法Encoding
- 01揹包問題的解決
- 黑蘋果的問題解決蘋果