在 Oracle 數據庫中,VARCHAR2(1024) 的單位 默認是字節(bytes),但具體行為取決於數據庫的字符集設置以及是否顯式指定了單位。

詳細説明:

Oracle 的 VARCHAR2 類型可以按 字節(BYTE)字符(CHAR) 來定義長度。語法如下:

VARCHAR2(size [BYTE | CHAR])
  • 如果你寫成 VARCHAR2(1024)沒有顯式指定單位,那麼 Oracle 會使用初始化參數 NLS_LENGTH_SEMANTICS 的默認值。
  • 默認情況下,NLS_LENGTH_SEMANTICS = BYTE(這是 Oracle 安裝時的標準默認值)。
  • 所以 VARCHAR2(1024) 等價於 VARCHAR2(1024 BYTE),表示最多存儲 1024 字節的數據。
  • 如果你希望按字符計數(特別是在使用多字節字符集如 UTF-8 時),應顯式聲明為:
VARCHAR2(1024 CHAR)

這樣就可以存儲最多 1024 個字符,無論每個字符佔用多少字節(例如中文在 UTF-8 中通常佔 3 字節,那麼實際可能佔用最多 3072 字節)。

注意事項:

  • 在多字節字符集(如 AL32UTF8)下,一個字符可能佔用多個字節。如果用 BYTE 定義,插入多字節字符時可能因字節限制而提前截斷。
  • 建議在創建表時顯式指定單位BYTE 或 CHAR),避免依賴默認設置,提高可移植性和可讀性。
  • 可通過以下 SQL 查看當前會話的默認長度語義:
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_LENGTH_SEMANTICS';

示例:

-- 按字節:最多 1024 字節(可能少於 1024 箇中文字符)
CREATE TABLE t1 (col1 VARCHAR2(1024));

-- 按字符:最多 1024 個字符(即使每個字符佔 3~4 字節)
CREATE TABLE t2 (col1 VARCHAR2(1024 CHAR));

總結:

VARCHAR2(1024) 默認是 1024 字節,除非 NLS_LENGTH_SEMANTICS 被改為 CHAR,或者你顯式寫成 VARCHAR2(1024 CHAR)