在Oracle中,以下各项有何不同:
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 BYTE),
ID_CLIENT NUMBER
)
和
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
ID_CLIENT NUMBER
)
发布于 2008-09-17 09:34:40
让我们假设数据库字符集是UTF-8,这是Oracle最新版本中的推荐设置。在这种情况下,有些字符需要超过1个字节才能存储在数据库中。
如果将该字段定义为VARCHAR2(11 BYTE)
,则Oracle最多可使用11个字节进行存储,但实际上您可能无法在该字段中存储11个字符,因为其中一些字符需要一个以上的字节来存储,例如非英语字符。
通过将字段定义为VARCHAR2(11 CHAR)
,您可以告诉Oracle它可以使用足够的空间来存储11个字符,而不管存储每个字符需要多少字节。单个字符可能最多需要4个字节。
发布于 2008-09-17 09:31:19
一个恰好有11个字节的空间,另一个恰好有11个字符。某些字符集,如Unicode变体,每个字符可能使用一个以上的字节,因此,根据编码的不同,11个字节字段的空间可能少于11个字符。
发布于 2008-09-17 09:31:26
我不确定,因为我不是Oracle用户,但我假设不同之处在于您使用Unicode (UTF-16/32)等多字节字符集。在这种情况下,11个字节可能占少于11个字符。
此外,对于重音字符或大小写,这些字段类型可能会有不同的处理方式,例如,'binaryField(ete) = "été"‘将不匹配,而’charField( be )=“été‘可能会匹配(同样不确定甲骨文)。
https://stackoverflow.com/questions/81448
复制相似问题