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

Oracle 字符集三大類型深度解析

     編輯:Oracle 資料庫基礎

概述

Oracle 字符集問題可歸納為三大類:資料庫字符集、客戶端字符集 (sqlplus等)、終端程序字符集 (非 Oracle)。三者不一致是導致中文亂碼的根本原因。

一、資料庫字符集 —— 核心基石

查詢當前字符集

SELECT * FROM nls_database_parameters;

關鍵參數:NLS_CHARACTERSET(如 UTF8、ZHS16GBK、AL32UTF8)、NLS_LANGUAGE(顯示語言)。

修改資料庫字符集 (謹慎操作)

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

注意:僅支援從子集向超集轉換 (如 US7ASCII → ZHS16GBK);ZHS16GBK 與 ZHS16CGB231280 無包含關係,互轉不受支援。

二、客戶端字符集 (NLS_LANG) —— 橋樑

查詢方式

  • 實例級:SELECT * FROM nls_instance_parameters; (來源:參數文件/環境變量/註冊表)
  • 會話級:SELECT * FROM nls_session_parameters; (來源:ALTER SESSION/會話環境變量)
  • 當前會話值:SELECT USERENV('LANGUAGE') FROM DUAL;

優先級順序

ALTER SESSION > 環境變量 > 註冊表 > 參數文件

設置範例

-- Windows CMD
SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
SET NLS_LANG=.ZHS16GBK   -- 僅指定字符集,語言用預設

-- Unix/Linux (.profile 或 .bash_profile)
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

格式:語言_地區.字符集,字符集前的點號不可省略。

三、終端程序字符集 —— 最後一公里

資料庫與客戶端字符集一致但仍亂碼,多因終端 (如 Bash、PuTTY、Windows CMD) 本身編碼不支援該字符集。Linux 下可用 locale 查看、export 設置終端編碼。

排查口訣

  1. 先看資料庫字符集是否正確
  2. 再看客戶端 NLS_LANG 是否與資料庫一致
  3. 最後檢查終端程序編碼支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved