字元集定義位元組資料的解讀方式,具備大小與包容關係。關鍵參數 NLS_LANG 格式:
NLS_LANG = language_territory.charset
範例:AMERICAN_AMERICA.ZHS16GBK
language:訊息語言territory:日期/數字格式charset:**真正影響資料儲存與交換的關鍵**兩資料庫 charset 相同即可互導,前兩部分僅影響提示語言。
SQL> SELECT USERENV('language') FROM DUAL;
-- 結果:AMERICAN_AMERICA.ZHS16GBK
第 2、3 位元組記錄字元集 ID (十六進位)。
0354cat exp.dmp | od -x | head -1 | awk '{print $2 $3}' | cut -c 3-6反查字元集名稱:
SQL> SELECT NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX')) FROM DUAL;
-- ZHS16GBK
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME[ID]\NLS_LANG$NLS_LANGSET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK (Windows)export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK (Unix)**三端必須一致** 才能正確匯入匯出。
SQLPLUS /NOLOG
CONN / AS SYSDBA
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;
SHUTDOWN IMMEDIATE
STARTUP
Oracle 8 以前只改 PROPS$,8 以後至少三張系統表記錄,單改 PROPS$ 會導致嚴重不一致。
0354)查詢目標字元集 ID:
SQL> SELECT TO_CHAR(NLS_CHARSET_ID('ZHS16GBK'), 'XXXX') FROM DUAL;
-- 0354
EXP/IMP 或 Data Pump 遷移資料NLS_LANG 與資料庫一致