Oracle
Oracle nvarchar2 佔用的空間是否是 varchar2 的兩倍?
關於這個問題的第 4 點(參考 MS SQL Server):
- VARCHAR 不儲存 Unicode 字元。
- NVARCHAR 確實儲存 Unicode 字元。
- 今天的應用程序應該始終與 Unicode 兼容。
- NVARCHAR 需要兩倍的空間來儲存它。
- 第 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 更有效。