Oracle

Oracle nvarchar2 佔用的空間是否是 varchar2 的兩倍?

  • October 4, 2011

關於這個問題的第 4 點(參考 MS SQL Server):

  1. VARCHAR 不儲存 Unicode 字元。
  2. NVARCHAR 確實儲存 Unicode 字元。
  3. 今天的應用程序應該始終與 Unicode 兼容。
  4. NVARCHAR 需要兩倍的空間來儲存它。
  5. 第 4 點無關緊要,因為儲存空間非常便宜。

Oracle 數據庫也是如此嗎?

不完全是。Oracle 為 VARCHAR 提供字節語義和字元語義。字元類型的預設值是字節語義;定義為的列VARCHAR2(10)包含 10 個字節,這可能與 10 個字元不同。新列的預設值由參數 NLS_LENGTH_SEMANTICS 控制。

但是在 UTF-8 數據庫中,您可以將一列定義為VARCHAR2(10 CHAR),它將容納 10 個字元。即使其中五個是單字節字元並且其中五個是多字節字元,所有 10 個都適合。

NCHAR 和 NVARCHAR2 始終使用字元語義。一列NVARCHAR(20)將包含 20 個字元,但可能需要 60 個字節來保存所有字元。

NVARCHAR2 限制為 4000 個字節,即 4000 個單字節字元,但只有三分之一的多字節字元。(假設每個字元最多三個字節。)

磁碟空間比以前便宜得多。但是您仍然必須從磁碟上獲取數據才能使其有用。更多字節,更多時間;更多的時間,更多的費用。IME,磁碟空間的成本只對不需要付費的人來說並不重要。

*Oracle 數據庫概念*中的更多詳細資訊。

是的 - 如果您使用 AL32UTF8 作為您的字元集,並且使用 AL16UTF16 作為您的國家字元集,並且您的數據主要是 ASCII。

AL16UTF16 每個字元總是需要 2 個字節,AL32UTF8 向後兼容 ASCII 並且只會使用 1 個字節來儲存 ASCII 字元。

但對於某些語言,AL16UTF16 可能比 AL32UTF8 更有效。

引用自:https://dba.stackexchange.com/questions/5539