【发布时间】:2010-11-17 14:15:05
【问题描述】:
现有表中列的数据类型是 Char(4) 类型。现在,如果我将列长度增加到 10,那么在选择该行时会不会有任何影响。
【问题讨论】:
标签: database oracle performance
现有表中列的数据类型是 Char(4) 类型。现在,如果我将列长度增加到 10,那么在选择该行时会不会有任何影响。
【问题讨论】:
标签: database oracle performance
我相信当你增加一个 char 字段时,会添加额外的空格来填充那些尚未填充的空间,如果不是全部的话,在某些数据库中。
这可能会影响一些没有预料到这种行为的程序,如果没有修剪额外的空白,可能会导致一些输出问题。
我假设类似子字符串的函数(以及那些取决于字符串长度的函数)也可能会受到影响,因为您的字符串的长度现在已经改变了。
【讨论】:
为什么不使用 varchar2(10)?你真的对每条记录都使用了整个字符串吗?
【讨论】:
在真空中,在列上扩展 VARCHAR2 数据类型应该没有真正的影响。
与右侧填充空白的 CHAR 不同,较大的 VARCHAR2 大小不会显着更改任何现有记录。
但是,正如其他人所提到的,我们无法预测的是您在数据库顶部的任何层会发生什么,这可能依赖于特定大小的列,但我相信您可以比我们更好地回答这个问题.
不过要小心,让 VARCHAR2 列再次变小并不容易。即使您的数据在新的限制范围内,Oracle 也会坚持该列为空。最好的办法是导出行并重建表或洗牌(创建新列、迁移值、删除旧列)。
【讨论】:
“选择该行时”
在这些情况下,您可能遭受的唯一影响是意外截断。我记得有一次问我公司的 DB2 专家,指标值“-2”是什么意思。他不知道。
但是,如果您在任何地方遇到任何涉及“LENGTH(yourcolumnname)”的查询,结果证明您的代码依赖于该 LENGTH() 调用永远不会返回大于 4 的值,那么您当然有麻烦了。
【讨论】: