字元集是位元組資料的解碼符號集合,具大小與包容關係。NLS_LANG 參數控制用戶端字元集行為,格式:
NLS_LANG = LANGUAGE_TERRITORY.CHARACTERSET
-- 例:AMERICAN_AMERICA.ZHS16GBK
兩資料庫匯入匯出僅需 CHARACTERSET 相同 即可,語言/地域可不同(建議統一用 AMERICAN_AMERICA 避免訊息亂碼)。
| 端點 | 查詢方式 | 範例結果 |
|---|---|---|
| Server 端 | SELECT USERENV('LANGUAGE') FROM DUAL; | AMERICAN_AMERICA.ZHS16GBK |
| 或 | SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%'; | NLS_CHARACTERSET=ZHS16GBK |
| Client 端 | Windows:登錄表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ | AMERICAN_AMERICA.ZHS16GBK |
Linux/Unix:echo $NLS_LANG 或 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK | 同上 | |
| DMP 檔 | 小檔:UltraEdit 16進位看第 2-3 位元組 | 0354 → ZHS16GBK |
大檔:cat exp.dmp | od -x | head -1 | awk '{print $2$3}' | cut -c3-6 | 同上 | |
轉換:SELECT NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX')) FROM DUAL; | ZHS16GBK |
ALTER SESSION > 環境變數/註冊表 > 參數檔 > 資料庫預設
SELECT * FROM NLS_SESSION_PARAMETERS; -- 當前會話實際生效值
IMP-00031 → 修改 DMP 檔字元集標記或調整 Client NLS_LANG 匹配 DMP。