首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BYTE和CHAR在列数据类型中的差异

BYTE和CHAR在列数据类型中的差异
EN

Stack Overflow用户
提问于 2008-09-17 09:27:31
回答 4查看 345K关注 0票数 182

在Oracle中,以下各项有何不同:

代码语言:javascript
复制
CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

代码语言:javascript
复制
CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-17 09:34:40

让我们假设数据库字符集是UTF-8,这是Oracle最新版本中的推荐设置。在这种情况下,有些字符需要超过1个字节才能存储在数据库中。

如果将该字段定义为VARCHAR2(11 BYTE),则Oracle最多可使用11个字节进行存储,但实际上您可能无法在该字段中存储11个字符,因为其中一些字符需要一个以上的字节来存储,例如非英语字符。

通过将字段定义为VARCHAR2(11 CHAR),您可以告诉Oracle它可以使用足够的空间来存储11个字符,而不管存储每个字符需要多少字节。单个字符可能最多需要4个字节。

票数 285
EN

Stack Overflow用户

发布于 2008-09-17 09:31:19

一个恰好有11个字节的空间,另一个恰好有11个字符。某些字符集,如Unicode变体,每个字符可能使用一个以上的字节,因此,根据编码的不同,11个字节字段的空间可能少于11个字符。

另请参阅http://www.joelonsoftware.com/articles/Unicode.html

票数 23
EN

Stack Overflow用户

发布于 2008-09-17 09:31:26

我不确定,因为我不是Oracle用户,但我假设不同之处在于您使用Unicode (UTF-16/32)等多字节字符集。在这种情况下,11个字节可能占少于11个字符。

此外,对于重音字符或大小写,这些字段类型可能会有不同的处理方式,例如,'binaryField(ete) = "été"‘将不匹配,而’charField( be )=“été‘可能会匹配(同样不确定甲骨文)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/81448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档