【问题标题】:Oracle Character TypesOracle 字符类型
【发布时间】:2010-10-20 22:43:33
【问题描述】:

使用 VARCHAR2 (1 BYTE) 是否比使用 CHAR(1 BYTE) 效率低?

如果我从未在字段中输入任何长度超过一个字符的值,那么使用 VARCHAR2 (2000 BYTE) 是否比使用 CHAR(1 BYTE) 效率低?

** 我所说的高效是指在时间(搜索)和空间(存储)方面都高效。

【问题讨论】:

  • 效率在什么方面?存储?
  • 我的意思是在时间(搜索)和存储方面都高效。

标签: oracle types char varchar2


【解决方案1】:

根据您的字符集,CHAR(1 BYTE) 可能无法存储任何特定字符,因此如果我们谈论多字节,VARCHAR2(2000 BYTE) 和 CHAR(1 BYTE) 之间可能存在差异字符。

更一般地说,在 SQL(PL/SQL 规则有点不同)中,如果您只存储 1 个字节的数据(我假设“高效”主要转化为存储效率)。一个 VARCHAR2(2000 BYTE) 会经常导致客户端应用程序分配一个 2000 字节的缓冲区来保存字段的内容,因为客户端应用程序事先不知道实际数据大小,这可能会导致客户端应用程序使用过多RAM 量。不过,这可能会或可能不会转化为真正的问题。大多数客户端应用程序不会因为 RAM 而受到影响,大多数结果集也不会向客户端返回数百万行,因此在几百行上浪费几个 k 可能没什么大不了的。

有一个AskTom thread 更详细,特别是关于 PL/SQL 规则。

【讨论】:

  • VARCHAR2 条目的长度如何存储?字符串是否以 null 结尾(如在 C 中)或是否有长度值?这种长度确定会降低效率吗?
  • CHAR 和 VARCHAR2 列在块头中都有一个长度属性。因此,无论我们谈论的是 VARCHAR2(2000) 还是 CHAR(1),您都可以为长度字段添加 2 个字节的存储空间。
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 2019-11-22
相关资源
最近更新 更多