在PL / SQL中将varchar2变量声明为最大长度的任何缺点

时间:2017-03-22 04:33:18

标签: oracle plsql

在PL / SQL中,如果我们使用varchar2(100)创建变量50,然后为变量分配长度为100的值,则使用的总内存为{{1字符。

但如果您将其声明为varchar2[4000]或更多,则只会使用50个字符。

varchar列是否始终只分配您指定的内容?

此外,如果是这种情况,将所有varchar2变量声明为最大长度是不错的做法,因为内存将被动态分配?请澄清。谢谢

2 个答案:

答案 0 :(得分:0)

你在那里错了。 varchar2(100)使用比原始数据多一个字节,将长度存储为无符号字节。)

对于超过255的最大长度,使用比原始数据多2个字节,将长度存储为无符号的16位(2字节)整数。

是的,这是一个小小的惩罚。

  • 如果您的值(大部分)长度相同(无额外字节),则使用固定宽度char(n)
  • 使用varchar(n),其中n < 256,如果你的所有值都适合(1个额外字节)
  • 另外使用varchar(4000)(2个额外字节)

我不担心字节 - 只需使用方便的东西。

答案 1 :(得分:0)

如果我们使用与内存不同的盲目大小,我想数据完整性会受到关注。如果我们不知道我们存储的是什么,我们如何确定数据大小。如果价值超过4000大关怎么办?

此外,我在使用varchar2(4000)在组合列上创建索引时遇到了问题。 你会得到这样的东西 错误报告: SQL错误:ORA-01450:超出最大密钥长度(6398) 01450. 00000 - “超出最大密钥长度(%s)” *原因: *行动:

相关问题