SELECT * FROM v$nls_valid_values WHERE parameter = 'CHARACTERSET' ORDER BY value;
常見輸出:AL16UTF16、AL24UTFFSS、AL32UTF8 等。
SELECT * FROM nls_database_parameters;
| 參數 | 示例值 | 說明 |
|---|---|---|
| NLS_LANGUAGE | AMERICAN | 語言名稱,影響月份/星期顯示、錯誤消息語言 |
| NLS_TERRITORY | AMERICA | 地域名稱,影響貨幣、數字、日期默認格式 |
| NLS_CHARACTERSET | ZHS16GBK | 資料庫字符集,存儲 CHAR/VARCHAR2/CLOB 數據 |
| NLS_NCHAR_CHARACTERSET | AL16UTF16 | 國家字符集,存儲 NCHAR/NVARCHAR2/NCLOB 數據 |
| NLS_SORT | BINARY | 排序規則:BINARY(二進制碼值) 或 語言排序如 SCHINESE_PINYIN_M |
| NLS_COMP | BINARY | 比較語義:BINARY 或 LINGUISTIC(配合 NLS_SORT) |
| NLS_DATE_FORMAT | DD-MON-RR | 默認日期顯示格式 |
| NLS_LENGTH_SEMANTICS | BYTE | CHAR/VARCHAR2 長度語義:BYTE 或 CHAR |
ZHS16GBK 雙字節編碼,中文佔 2 字節;AL32UTF8 變長編碼,中文佔 3 字節。BINARY:按編碼值比較,速度最快,但 'a' > 'Z',不符合語言習慣。SCHINESE_PINYIN_M:按拼音排序,需 NLS_COMP=LINGUISTIC 生效。ALTER SESSION SET NLS_SORT = 'SCHINESE_PINYIN_M';
ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
此後 ORDER BY、WHERE col > '值'、DISTINCT、GROUP BY 均按拼音邏輯。
CREATE INDEX idx ON t(NLSSORT(col, 'NLS_SORT=SCHINESE_PINYIN_M')))才能被使用。NLS_LANG 環境變量(如 AMERICAN_AMERICA.AL32UTF8),避免客戶端/服務端編碼不匹配導致亂碼。BINARY 以利索引性能。