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

Oracle VARCHAR2 與 NVARCHAR2 區別詳解:字節 vs 字符語義

     編輯:MySQL 綜合教學

定義對比

類型語法長度單位最大值
VARCHAR2VARCHAR2(size)**字節**4000 字節
NVARCHAR2NVARCHAR2(size)**字符**(按國家字符集)4000 字節上限,字符數視字符集而定

核心差異:中文存儲實測

場景:AL32UTF8 字符集(中文 3 字節)

定義可存中文字符數可存英文字符數說明
VARCHAR2(10)3 個(10÷3≈3)10 個按字節計算
NVARCHAR2(10)10 個10 個按字符計算,國家字符集通常為 AL16UTF16(定長 2 字節)

原理深度

  • VARCHAR2:長度語義永遠是 **Byte**,受數據庫字符集(NLS_CHARACTERSET)影響;
  • NVARCHAR2:長度語義是 **Character**,受國家字符集(NLS_NCHAR_CHARACTERSET)影響,通常為 UTF16,定長 2 字節/字符,不受數據庫字符集變更影響;
  • NVARCHAR2 存儲開銷固定(2 字節/字符),VARCHAR2 在 UTF8 下中文 3 字節、英文 1 字節,可變長度。

選型建議

  1. **多語言/國際化系統**:優先 NVARCHAR2,字符語義直觀,避免字節計算錯誤;
  2. **純 ASCII/英文為主**:VARCHAR2 更節省空間;
  3. **已有 VARCHAR2 表遷移**:評估數據截斷風險,NVARCHAR2(10) 實際佔 20 字節,可能超過行長度限制;
  4. **索引長度限制**:Oracle 單列索引鍵長度 ≤ 6398 字節,NVARCHAR2(3000) 即達 6000 字節,接近上限。

MySQL 對比補充

MySQL VARCHAR(N) 中的 N 為**字符數**(非字節),字符集決定實際字節上限(utf8mb4 單字符最多 4 字節,行長度 65535 字節)。這與 Oracle VARCHAR2 語義不同,遷移時需換算。

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