如何定义varchar2长度

unique_hxl 2010-07-01 04:23:39
小弟这两天在设计数据库,在定义可变长度时有一个很弱弱的问题要请教大家。

大家在定义varchar2时长度一般如何取值?为什么在定义varchar2时不直接取最大值4000呢?

这样有什么不好吗?
...全文
1297 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangren 2010-07-01
  • 打赏
  • 举报
回复
1、由于数据库的限制(参见Logical Database Limits),每个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,由于有限制,所以字段的长度也限制了索引字段的大小:
SQL> create table x(
2 a varchar2(2000),
3 b varchar2(2000),
4 c varchar2(2000),
5 d varchar2(2000),
6 e varchar2(2000));

表已创建。

SQL> create table y(
2 a varchar2(10),
3 b varchar2(10),
4 c varchar2(10),
5 d varchar2(10),
6 e varchar2(10));

表已创建。

SQL> create index y_idx on y(a,b,c,d);

索引已创建。

SQL> create index x_idx on x(a,b,c,d);
create index x_idx on x(a,b,c,d)
*
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)

2、字段长度能够起到一定的constraint作用,比如一个字段长度要求是10个字节,必须要设置为varchar2(10)。
3、如果用到ARRAY FETCH,那么客户端fetch 数据需要的内存是根据定义的字段的长度,所以大的字段会需要大的内存。比如10个VARCHAR2(4000)字段,我要取100行,那么就需要 4000*10*100的内存,大约是4M,但是如果定义为VARCHAR2(10),那么就需要10*10*100的内存。
unique_hxl 2010-07-01
  • 打赏
  • 举报
回复
即使像存储姓名之类的,我设计成varchar2长度4000,和长度20对oracle来说有什么区别?

如果设计成4000和20对数据库来说完全没有区别,那么我认为设计成4000还不用考虑实际情况下应该存储多少字节内容,不是简单一点吗?
心中的彩虹 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 unique_hxl 的回复:]
小弟这两天在设计数据库,在定义可变长度时有一个很弱弱的问题要请教大家。

大家在定义varchar2时长度一般如何取值?为什么在定义varchar2时不直接取最大值4000呢?

这样有什么不好吗?
[/Quote

根据实际情况 设计长度
Dave 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 unique_hxl 的回复:]
小弟这两天在设计数据库,在定义可变长度时有一个很弱弱的问题要请教大家。

大家在定义varchar2时长度一般如何取值?为什么在定义varchar2时不直接取最大值4000呢?

这样有什么不好吗?
[/Quote]

根据系统字段定义取值,比如姓名,varchar2(10)就可以了,因为很少有超过5个汉字的。
unique_hxl 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 forgetsam 的回复:]

varchar2长度是0~32767 在表中长度最大4000

字段长度大小会影响到Oracle的块大小

如果你不需要考虑性能,随便用
[/Quote]
能说具体点吗,字段长度大小为什么会影响块的大小。我定义为4000但是实际分配存储的大小跟我实际存储的内容有关啊。
micro180 2010-07-01
  • 打赏
  • 举报
回复
全部用最大值4000的时候,有出现过Buffer不够大的情况,应该是楼上说的影响到块大小了
forgetsam 2010-07-01
  • 打赏
  • 举报
回复
varchar2长度是0~32767 在表中长度最大4000

字段长度大小会影响到Oracle的块大小

如果你不需要考虑性能,随便用

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧