列数据类型中BYTE和CHAR之间的区别是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

在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
)
提问于
用户回答回答于

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

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

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

用户回答回答于

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

扫码关注云+社区