Oracle 通過國家語言支持(NLS)實現多語言環境,字符集決定數據如何編碼存儲、顯示與排序。創建數據庫時需指定兩類字符集:
CHAR/VARCHAR2/CLOB/LONG、表名列名、PL/SQL 代碼等。NCHAR/NVARCHAR2/NCLOB,增強亞洲語言定長多字節支持,9i 起僅限 AL16UTF16(預設)或 UTF8。| 類別 | 位數 | 容量 | 典型字符集 | 適用場景 |
|---|---|---|---|---|
| 單字節 7-bit | 7 | 128 | US7ASCII | 基礎英文 |
| 單字節 8-bit | 8 | 256 | WE8ISO8859P1 | 西歐語系 |
| 變長多字節 | 1-4 | Unicode 全覆蓋 | AL32UTF8 (UTF-8) | 亞洲語言、多語言混存、Web 應用首選 |
| 定長多字節 | 2 | Unicode BMP | AL16UTF16 (UTF-16) | 僅作國家字符集,N 類型列定長存儲 |
ORA-12899 錯誤。-- 查看數據庫級參數
SELECT * FROM V$NLS_PARAMETERS;
-- 查看服務端字符集
SELECT USERENV('language') FROM DUAL;
-- 返回例:SIMPLIFIED CHINESE_CHINA.AL32UTF8
-- 查看 DMP 文件字符集(UltraEdit 16進制查看第 2-3 字節,如 0354)
SELECT NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX')) FROM DUAL;
-- 客戶端字符集:註冊表 NLS_LANG 或 DOS 臨時設置
SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
NLS_LANG 必須與數據庫字符集匹配,或至少兼容(如庫為 AL32UTF8,客戶端可設 ZHS16GBK,Oracle 自動轉碼)。CHARSET 參數指定轉換。