带有 AL32UTF8 的 Oracle NVARCHAR2(4000) 可能吗?

Pat*_*ski 1 oracle datatypes

我想,通过阅读这里和其他地方的项目,如果我的 Oracle 数据库 NLS_CHARACTERSET 设置为 AL32UTF8,我可以有一个 NVARCHAR2(4000) 类型的列,但是当我尝试创建它时,我得到SQL Error: ORA-00910: specified length too long for its datatype. 我正在尝试的有什么问题? NVARCHAR2 列是否总是 UTF16,与我读过的不同?

Jus*_*ave 6

如果您NLS_CHARACTERSET是 AL32UTF8,则任何VARCHAR2列都将支持 Unicode(通过 UTF-8 编码)。在 99.9% 的情况下,您永远不想创建NVARCHAR2列。

NVARCHAR2列,它使用NLS_NCHAR_CHARACTERSET它几乎总是AL16UTF16真的只有一对夫妇的情况下非常有用。第一个,也是迄今为止最常见的情况是,当您的遗留应用程序NLS_CHARACTERSET不支持 Unicode 且无法迁移到 Unicode 但您希望在少数列中支持 Unicode 数据时。这不是这里的情况。第二种情况是当数据库确实支持 Unicode 但出于某种原因您想使用 UTF-16 编码时,例如能够主要使用 UTF-16 中的每个字符 2 个字节而不是每个字符 3 个字节来存储主要的日语和中文数据在 UTF-8 中。但是如果你这样做,你仍然(除了 12.1 和拥有 32kVARCHAR2列)限制为 4000 字节(UTF-16 列中为 2000 个字符)。因此,当您尝试定义NVARCHAR2(4000)至少需要 8000 个字节来存储 4000 个字符时会出现错误。