JA16EUC (ID 830)ZHS16GBK (ID 852)IMP-00016: 不支援要求的字元集轉換(從類型 830 到 852)DMP 檔案第 2、3 位元組儲存字元集 ID(十六進位)。修改這兩個位元組可「欺騙」匯入工具,繞過字元集檢查。
-- 使用 UltraEdit 開啟 DMP(16進位模式),查看第 2、3 位元組
-- 假設為 03 2E(十六進位)
或用 SQL 驗證:
SELECT nls_charset_name(TO_NUMBER('032E', 'XXXX')) FROM dual;
-- 結果:JA16EUC
SELECT TO_CHAR(nls_charset_id('ZHS16GBK'), 'XXXX') FROM dual;
-- 結果:0354
03 2E 改為 03 54-- Windows 環境變數或註冊表
SET NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
-- 匯入
imp scott/tiger@SDES FULL=Y FILE=c:\expdat.dmp
| 函數 | 用途 | 範例 |
|---|---|---|
| NLS_CHARSET_NAME(id) | ID 轉字元集名稱 | NLS_CHARSET_NAME(830) → 'JA16EUC' |
| NLS_CHARSET_ID(name) | 名稱轉 ID | NLS_CHARSET_ID('ZHS16GBK') → 852 |
| TO_CHAR(id, 'XXXX') | 十進位轉十六進位 | TO_CHAR(852, 'XXXX') → '354' |
| TO_NUMBER(hex, 'XXXX') | 十六進位轉十進位 | TO_NUMBER('0354', 'XXXX') → 854 |
NLS_LANG = LANGUAGE_TERRITORY.CHARSET
三個組成部分:
LANGUAGE - 伺服器訊息語言
TERRITORY - 日期/數字格式
CHARSET - 字元集(最關鍵)
範例:AMERICAN_AMERICA.ZHS16GBK
SELECT userenv('language') FROM dual;
-- 結果範例:SIMPLIFIED CHINESE_CHINA.UTF8
IGNORE=Yimpdp (Data Pump) 並指定 TRANSFORM=SEGMENT_ATTRIBUTES:N 等參數impdp system/password DIRECTORY=dpump_dir DUMPFILE=expdat.dmp
TABLE_EXISTS_ACTION=REPLACE
Data Pump 會自動處理字元集轉換,支援更多字元集組合,為現代環境首選工具。