Oracle nvarchar2 占用的空间是 varchar2 的两倍吗?

Laz*_*zer 5 oracle oracle-11g-r2 varchar

关于这个问题的第 4 点(参考 MS SQL Server):

  1. VARCHAR 不存储 Unicode 字符。
  2. NVARCHAR 确实存储 Unicode 字符。
  3. 今天的应用程序应该始终与 Unicode 兼容。
  4. NVARCHAR 需要两倍的空间来存储它。
  5. 第 4 点无关紧要,因为存储空间非常便宜。

Oracle 数据库也是如此吗?

Mik*_*ll' 4

不完全是。Oracle 支持 VARCHAR 的字节语义和字符语义。字符类型默认是字节语义;定义为的列VARCHAR2(10)可容纳 10 个字节,这可能与 10 个字符不同。新列的默认值由参数 NLS_LENGTH_SEMANTICS 控制。

但在 UTF-8 数据库中,您可以将列定义为VARCHAR2(10 CHAR),该列将包含 10 个字符。即使其中 5 个是单字节字符,5 个是多字节字符,所有 10 个字符都可以容纳。

NCHAR 和 NVARCHAR2 始终使用字符语义。一列NVARCHAR(20)可容纳 20 个字符,但可能需要 60 个字节来容纳所有字符。

NVARCHAR2 限制为 4000 个字节,即 4000 个单字节字符,但多字节字符数仅为 1/3。(假设每个字符最多三个字节。)

磁盘空间比以前便宜得多。但您仍然必须从磁盘中获取数据才能发挥作用。更多字节,更多时间;更多的时间,更多的费用。IME,磁盘空间成本不仅仅对那些不需要付费的人来说才重要。

更多详细信息,请参阅Oracle 数据库概念