使用unicode char set选项安装oracle 11g时,char和nchar数据类型有什么区别?

Mau*_*Huu 5 oracle11g

我使用unicode char set选项安装oracle 11g。而且我发现我可以将Unicode字符插入CHAR数据类型列。所以我的问题是:使用unicode选项安装oracle 11g时,CHAR和NCHAR数据类型有什么区别?

小智 5

有两个主要区别。

  1. 长度语义的默认值。默认情况下

    CHAR(30) != NCHAR(30) 但是 CHAR(30 CHAR) = NCHAR(30)

    默认长度语义(由 NLS_LENGTH_SEMANTICS 参数指定)用于 CHAR 但不用于 NCHAR。此参数的默认值是字节。NCHAR 的长度总是以字符为单位。这很重要,因为 NCHAR(30) 将始终包含 30 个 unicode 字符 - CHAR(30 CHAR) 也是如此 - 但 CHAR(30) 默认仅包含 30 个字节,这可能等于或不等于 30 个 unicode 字符。

  2. AL32UTF8(数据库字符集 unicode 默认值)和 AL16UTF8(NLS_NCHAR_CHARACTERSET 默认值)不等价。两者都是可变长度的 unicode 字符集,但存储字符的方式不同,因此两者之间的存储要求有所不同,前者使用 1、2、3 有时每个字符 4 个字节,后者使用每个字符 2 个,有时每个字符 4 个字节)。您的里程将根据您存储的字符而有所不同。

    此外,NCHAR 支持在许多客户端应用程序和某些 Oracle 组件中受到限制,因此如果您将 AL32UTF8 用于数据库字符集,Oracle 的建议是坚持使用 CHAR 而根本不使用 NCHAR。