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

最佳答案

有两个主要区别。

  • 长度语义的默认值。默认
    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字符。
  • AL32UTF8(默认数据库字符集unicode)和AL16UTF8(默认NLS_NCHAR_CHARACTERSET)不等效。两者都是可变长度的unicode字符集,但是存储字符的方式不同,因此两者之间的存储要求会有所不同,前者每个字符使用1、2、3(有时为4个字节),后一个每个字符使用2(有时为4个字节)。您的里程会根据您存储的字符而有所不同。

    此外,在许多客户端应用程序和某些Oracle组件中,对NCHAR的支持受到限制,因此,如果您对数据库字符集使用AL32UTF8,Oracle的建议是坚持使用CHAR,而根本不使用NCHAR。
  • 关于oracle11g - 使用unicode char set选项安装oracle 11g时,char和nchar数据类型有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15538805/

    10-12 03:22