【大话IT】varchar2的长度定义的意义在哪里呢?

[复制链接]
查看11 | 回复9 | 2009-2-12 11:45:48 | 显示全部楼层 |阅读模式
最近表设计需要,有个困惑的地方,对于varchar2类型的数据,我们往往根据业务需要定义其长度,但是这个这个长度的意义在哪里呢?
举个栗子:
有一列学校名称,根据统计,使用varchar2(30)可以装下,为了防止例外情况出现,比如后续新增学校有超过varcahr2(30)的情况,使用varchar2(50)的字段存储该信息。那问题来了,如果varchar2(30)和varchar2(50)我用来存储数据对于后续的使用和运维来讲,在数据合规的前提下没啥区别的,那为啥不直接用大的呢?在激进一点直接用varchar2(4000)不是更好么?

自己对于varchar2(10)和varchar(4000)的数据做了个简单的测试,包括以下几个方面的对比:
1.创建两个表,都为5个字段,A表,5个均为varchar2(10),B表,5个均为varchar2(4000)
2.使用sqlldr进行数据加载,加载数据长度为10,随机数字,重复度较低,数据量约为1GB
3.对于首字段创建索引
4.通过索引访问表,进行全表扫描
发现无论表空间占用的数据量,索引占用的数据量,加载耗时,访问成本都相近,那既然相似,在物理设计的时候,直接用varcahr2(4000)是不是更加适合后续的扩展呢?varchar2(10)的意义何在?

回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
比如约束作用?限制就只能这么多个字符
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
chengccy2010 发表于 2015-6-15 14:26
比如约束作用?限制就只能这么多个字符

您说的也是一方面,我觉得对于系统设计来讲,数据的长度控制和裁剪应该在应用层就实现了,这样效率会更高。
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
Antilog 发表于 2015-6-15 14:31
您说的也是一方面,我觉得对于系统设计来讲,数据的长度控制和裁剪应该在应用层就实现了,这样效率会更高 ...

http://www.itpub.net/thread-732714-2-1.html
17楼的文档有说到
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
chengccy2010 发表于 2015-6-15 15:08
http://www.itpub.net/thread-732714-2-1.html
17楼的文档有说到

看到您给的链接中的文档了,正在拜读,多谢!
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
我也一直有这个疑问,
我现在知道的就是一个约束的作用,现在字符长度
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
与衣服尺码的意义一样
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
就是起约束作用;对于一些和数据库之间API, 每个接口参数都必须预先分配内存空间,如果全部都用VARCHAR2(4000)将会浪费而且低效。
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
newkid 发表于 2015-6-16 00:01
就是起约束作用;对于一些和数据库之间API, 每个接口参数都必须预先分配内存空间,如果全部都用VARCHAR2(4 ...

您的意思是在程序和数据库交互的时候,会根据varchar2的长度定义在内存中提前分配空间么?有相关的例子可以说明么?是程序中的处理原因还是驱动,比如ojdbc本身的机制引起的?谢谢!
回复

使用道具 举报

千问 | 2009-2-12 11:45:48 | 显示全部楼层
〇〇 发表于 2015-6-15 17:23
与衣服尺码的意义一样

感觉像是弹力衣服额,并且尺码大越好,后面变肥了就不用换了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行