首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle VARCHAR2 vs NVARCHAR2 深度解析:字元語意、長度限制與實測對比

     編輯:Oracle 資料庫相關知識

Oracle 兩大變長字串類型 VARCHAR2 與 NVARCHAR2 在字元語意、最大長度、字元集相依性上有本質差異。本文引用官方文件定義,配合 UTF8 字元集實測,釐清選型關鍵。

官方定義對照

特性VARCHAR2(size [BYTE|CHAR])NVARCHAR2(size)
長度單位可指定 BYTE 或 CHAR固定為字元數
最大長度4000 位元組或字元4000 位元組(受國家字元集限制)
字元集資料庫字元集國家字元集(AL16UTF16/UTF8)
儲存編碼資料庫字元集編碼國家字元集編碼

實測環境:UTF8 字元集

-- VARCHAR2(6 CHAR) 以字元計長
CREATE TABLE t_varchar2(name VARCHAR2(6 CHAR));
INSERT INTO t_varchar2 VALUES('中國');           -- 2 字元,成功
INSERT INTO t_varchar2 VALUES('中華人民共和');     -- 6 字元,成功
INSERT INTO t_varchar2 VALUES('中華人民共和國');   -- 7 字元,失敗 ORA-12899

-- NVARCHAR2(6) 以字元計長
CREATE TABLE t_nvarchar2(name NVARCHAR2(6));
INSERT INTO t_nvarchar2 VALUES('中國');           -- 成功
INSERT INTO t_nvarchar2 VALUES('中華人民共和');     -- 成功
INSERT INTO t_nvarchar2 VALUES('中華人民共和國');   -- 失敗 ORA-12899

-- 最大長度差異
CREATE TABLE t_varchar2_max(name VARCHAR2(4000 CHAR));  -- 成功
CREATE TABLE t_nvarchar2_max(name NVARCHAR2(4000));     -- 失敗 ORA-00910

核心差異總結

  1. 語意相似:NVARCHAR2(size) ≈ VARCHAR2(size CHAR),皆以字元為單位
  2. 最大長度不同:
    • VARCHAR2(4000 CHAR):最多 4000 字元
    • NVARCHAR2(4000):受 4000 位元組上限限制,UTF8 環境下最多約 1333 字元(實測 2000 字元為上限)
  3. 字元集綁定:NVARCHAR2 綁定國家字元集(NLS_NCHAR_CHARACTERSET),跨資料庫遷移需注意
  4. 效能:單一字元集資料庫用 VARCHAR2 避免隱性轉換;多語言混存、需統一 Unicode 處理時考慮 NVARCHAR2

選型建議

場景建議類型理由
純 ASCII/單一語系VARCHAR2(n CHAR)效能最佳,無編碼轉換
多語言混存、需 UnicodeNVARCHAR2(n)統一 UTF-16/UTF-8 儲存
需超過 2000 字元VARCHAR2(n CHAR)NVARCHAR2 受 4000 位元組硬限制
既有表為 NVARCHAR2維持原狀避免遷移成本與風險

理解字元語意與位元組上限的本質差異,才能為資料模型做正確選型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved