Exp/Imp 過程涉及四個字符集,任意不一致即觸發轉換:
源DB字符集 → [Export轉換] → Export會話字符集 → (DMP檔案頭記錄Export會話字符集ID)
↓
[Import轉換] → Import會話字符集 → [Import轉換] → 目標DB字符集
| 源DB | Export會話 | 結果 |
|---|---|---|
| ZHS16GBK (超集) | US7ASCII (7-bit) | 所有中文變 '??',資料永久損失 |
| ZHS16GBK | ZHS16CGB231280 (子集) | 超出子集範圍的字變 '??' |
| ZHS16CGB231280 | ZHS16GBK | 完全轉換成功 (子集→超集安全) |
執行 Exp/Imp 前,確保以下四者**完全一致**:
源DB字符集 = Export會話字符集 = Import會話字符集 = 目標DB字符集
-- SQL 查詢
SELECT VALUE$ FROM SYS.PROPS$ WHERE NAME = 'NLS_CHARACTERSET';
-- 或查看 init.ora 參數 NLS_CHARACTERSET
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_\NLS_LANG export NLS_LANG=AMERICAN_AMERICA.ZHS16GBKUPDATE SYS.PROPS$ SET VALUE$ = 'TARGET_CHARSET' WHERE NAME = 'NLS_CHARACTERSET';
COMMIT;
| 類型 | 代表 | 中文字符長度 | SUBSTR 行為 |
|---|---|---|---|
| 單字節 7-bit | US7ASCII | 1漢字=2字符 | SUBSTR('東北大學',1,2)='東' |
| 雙字節 | ZHS16GBK | 1漢字=1字符 | SUBSTR('東北大學',1,2)='東北' |