首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle NLS 參數全解析:字符集、排序規則與日期格式的關聯配置

     編輯:Oracle 資料庫基礎

查詢合法字符集值

SELECT * FROM v$nls_valid_values WHERE parameter = 'CHARACTERSET' ORDER BY value;

常見輸出:AL16UTF16、AL24UTFFSS、AL32UTF8 等。

查看當前資料庫 NLS 參數

SELECT * FROM nls_database_parameters;

關鍵參數對照表

參數示例值說明
NLS_LANGUAGEAMERICAN語言名稱,影響月份/星期顯示、錯誤消息語言
NLS_TERRITORYAMERICA地域名稱,影響貨幣、數字、日期默認格式
NLS_CHARACTERSETZHS16GBK資料庫字符集,存儲 CHAR/VARCHAR2/CLOB 數據
NLS_NCHAR_CHARACTERSETAL16UTF16國家字符集,存儲 NCHAR/NVARCHAR2/NCLOB 數據
NLS_SORTBINARY排序規則:BINARY(二進制碼值) 或 語言排序如 SCHINESE_PINYIN_M
NLS_COMPBINARY比較語義:BINARY 或 LINGUISTIC(配合 NLS_SORT)
NLS_DATE_FORMATDD-MON-RR默認日期顯示格式
NLS_LENGTH_SEMANTICSBYTECHAR/VARCHAR2 長度語義:BYTE 或 CHAR

字符集與排序的關鍵關係

  1. 字符集決定存儲編碼:ZHS16GBK 雙字節編碼,中文佔 2 字節;AL32UTF8 變長編碼,中文佔 3 字節。
  2. 排序規則決定比較邏輯:
    • BINARY:按編碼值比較,速度最快,但 'a' > 'Z',不符合語言習慣。
    • SCHINESE_PINYIN_M:按拼音排序,需 NLS_COMP=LINGUISTIC 生效。
  3. 會話級覆蓋:
    ALTER SESSION SET NLS_SORT = 'SCHINESE_PINYIN_M';
    ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
    此後 ORDER BY、WHERE col > '值'、DISTINCT、GROUP BY 均按拼音邏輯。
  4. 索引影響:語言排序需建立語言索引(CREATE INDEX idx ON t(NLSSORT(col, 'NLS_SORT=SCHINESE_PINYIN_M')))才能被使用。

最佳實踐

  • 新建資料庫強制使用 AL32UTF8,避免字符集遷移痛苦。
  • 應用層明確指定 NLS_LANG 環境變量(如 AMERICAN_AMERICA.AL32UTF8),避免客戶端/服務端編碼不匹配導致亂碼。
  • 排序規則以會話級設定為主,資料庫級保持 BINARY 以利索引性能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved