我找不到区别,尽管在所有搜索中他们告诉我同样的事情,但我无法完全分解其含义来理解它。数据类型参考:(https://msdn.microsoft.com/es-es/library/ms151817.aspx)Oracle。
- NVARCHAR
- VARCHAR2
- VARCHAR
我找不到区别,尽管在所有搜索中他们告诉我同样的事情,但我无法完全分解其含义来理解它。数据类型参考:(https://msdn.microsoft.com/es-es/library/ms151817.aspx)Oracle。
Oracle 在其文档中将它们分组如下:
CHAR : 固定长度
VARCHAR2和VARCHAR:可变长度
NCHAR和NVARCHAR2:Unicode 数据
字符
数据类型
CHAR
存储固定长度的字符串。当您创建一个包含一列的表时,您必须为列的宽度指定一个介于 1 到 2000 个字节之间CHAR
的字符串长度(以字节或字符为单位)。默认值为 1 个字节。CHAR
Oracle 保证:
当您在表中插入或更新一行时,CHAR 列的值具有固定长度。
如果您给出一个较短的值,则将该值填充为固定长度的空白。
如果值太大,Oracle 数据库会返回错误。
Oracle 数据库使用空白填充的比较语义来比较值
CHAR
。VARCHAR2
数据类型
VARCHAR2
存储可变长度字符串。当您创建包含列的表时VARCHAR2
,您指定列的最大字符串长度(以字节或字符为单位)在 1 到 4000 个字节之间VARCHAR2
。对于每一行,Oracle 数据库将列中的每个值存储为可变长度字段,除非某个值超过最大列长度,在这种情况下,Oracle 数据库会返回错误。使用VARCHAR2
并VARCHAR
节省表中的空间。例如,假设您声明
VARCHAR2
一个最大大小为 50 个字符的列。在单字节字符集中,如果VARCHAR2
特定行中的列值仅给出 10 个字符,则该行的列仅存储 10 个字符(10 个字节)而不是 50。Oracle 数据库比较
VARCHAR2
使用不受支持的比较语义的值。VARCHAR
该数据类型
VARCHAR
与 VARCHAR2 数据类型同义。为避免可能的行为变化,请始终使用VARCHAR2
存储可变长度字符串的数据类型。关于字符数据类型的长度语义
全球化支持允许对字符数据类型使用多个字符集。全球化支持允许您处理单字节和多字节字符数据并在字符集之间进行转换。客户端会话可以使用不同于数据库字符集的客户端字符集。
在为字符数据类型指定列长度时考虑字符大小。在为包含字符数据的列的表估计空间时,您应该注意这个问题。
字符数据类型的长度语义可以用字节或字符来衡量。
字节语义将字符串视为字节序列。这是字符数据类型的默认值。
字符语义将字符串视为字符序列。从技术上讲,字符是数据库字符集中的代码点。
对于单字节字符集,字符语义中定义的列与字节语义中定义的列基本相同。字符语义对于定义可变宽度的多字节字符串很有用;通过定义数据存储的实际长度要求来降低复杂性。
例如,在 Unicode (UTF8) 数据库中,您必须定义一个
VARCHAR2
最多可存储五个中文字符和五个英文字符的列。在字节语义中,这需要 (5 * 3 bytes) + (1 * 5 bytes) = 20 bytes;在字符语义中,该列需要 10 个字符。VARCHAR2 (20 BYTE) y SUBSTRB (<cadena>, 1, 20)
他们使用字节语义。VARCHAR2 (10 CHAR) y SUBSTR (<cadena>, 1, 10)
他们使用字符语义。该参数
NLS_LENGTH_SEMANTICS
决定一个新的字符数据类型列是使用字节还是字符语义。默认语义长度为字节。如果数据库中的所有字符数据类型列都使用字节语义(或全部使用字符语义),那么用户不必担心哪些列使用哪种语义。应尽可能避免使用上面显示的限定词BYTE
,CHAR
因为它们会导致混合语义数据库。相反,NLS_LENGTH_SEMANTICS
必须在服务器参数文件 (SPFILE
) 或初始化参数文件中正确设置初始化参数,并且列必须使用默认语义。NCHAR 和 NVARCHAR2
NCHAR
并且NVARCHAR2
是存储 Unicode 字符数据的 Unicode 数据类型。数据类型的字符集NCHAR
andNVARCHAR2
只能是AL16UTF16
orUTF8
并且在数据库创建时指定为国家字符集。AL16UTF16
它们UTF8
是Unicode编码。数据类型
NCHAR
存储与国家字符集对应的定长字符串。数据类型
NVARCHAR2
存储可变长度的字符串。当您创建具有列
NCHAR
或的表时NVARCHAR2
,指定的最大大小始终是字符长度语义。字符长度语义是 NCHAR 或NVARCHAR2
.例如,如果国家字符集为 UTF8,则以下语句定义最大字节长度为 90 个字节:
此语句创建最大字符长度为 30 的列。最大字节长度是最大字符长度和每个字符中最大字节数的倍数。
列的最大长度
NCHAR
为 2000 字节。它最多可以包含 2000 个字符。实际数据的最大字节数限制为 2000。在运行时必须同时满足两个大小限制。列的最大长度
NVARCHAR2
为 4000 字节。它最多可以包含 4000 个字符。实际数据受限于 4000 的最大字节限制。在运行时必须同时满足两个大小限制。另请参阅: Oracle 数据库全球化支持指南,了解有关数据类型
NCHAR
和NVARCHAR2
在 Oracle 数据库中使用 Unicode 数据
Unicode 致力于对人类已知的每种语言中的每个字符进行统一编码。它还提供了一种表示私有定义字符的方法。存储 Unicode 的数据库列可以存储以任何语言编写的文本。
实施全球化应用程序的 Oracle 数据库用户强烈需要在 Oracle 数据库中存储 Unicode 数据。无论数据库字符集如何,它们都需要保证为 Unicode 的数据类型。
Oracle 数据库通过 和 支持可靠的 Unicode
NCHAR
数据NVARCHAR2
类型NCLOB
。这些数据类型保证 Unicode 编码并且始终使用字符长度语义。NCHAR
/使用的字符集NVARCHAR2
可以是UTF8
或AL16UTF16
,这取决于创建数据库时的国家字符集设置。这些数据类型允许将 Unicode 字符数据存储在可能使用也可能不使用 Unicode 作为其数据库字符集的数据库中。隐式类型转换
除了 / 的所有隐式转换,Oracle 数据库还支持 / NVARCHAR2 的隐式
CHAR
转换。还支持/和/之间的隐式转换。VARCHAR2
NCHAR
CHAR
VARCHAR2
NCHAR
NVARCHAR2
以非常具体的方式。
你想要的最大长度。据我所知,Nvarchar2 仅在 Oracle 中使用。其中一项功能允许您使用更多的特殊字符。
char是可变长度数据类型。这是 ANSI 数据类型。比列大小短的值不能很好地用列大小填充。值得一说
(“_”被认为是一个空格)。
在这种情况下,始终会保存这 5 个空格。
nvarchar这反过来又将 VARCHAR 的最大大小限制为 8,000 字节。NVARCHAR 的意思是“几乎”相同,不同之处在于您可以存储 unicode 数据,这就是 N (uNicode) 的来源。
varchar2和varchar存储由(必需)确定的可变长度字符串。其范围为 1 到 4000 个字符。值得一说:
我希望这对你来说更清楚。
笔记:
考虑到不同的数据库引擎有一定的变化,但本质上它是这样工作的。
目前,varchar 和 varchar2 是同义词。 Oracle 保留VARCHAR2以支持区分 NULL 和空字符串,但不能完全确定是否已经包含 12c 版本。VARCHAR 不区分 NULL 和空字符串,而且永远不会。
如果它依赖于空字符串和NULL是一样的,应该使用VARCHAR2。