当前位置: 代码迷 >> Oracle开发 >> varchar2(10)和varchar2(4000)有什么区别解决思路
  详细解决方案

varchar2(10)和varchar2(4000)有什么区别解决思路

热度:584   发布时间:2016-04-24 07:36:40.0
varchar2(10)和varchar2(4000)有什么区别
create table t1(
f1 varchar2(10),
f2 varchar2(10),
f3 varchar2(10),
f4 varchar2(10),
f5 varchar2(10)
)

create table t2(
f1 varchar2(4000),
f2 varchar2(4000),
f3 varchar2(4000),
f4 varchar2(4000),
f5 varchar2(4000)
)
上述两个表定义在实际存储数据长度为10个以内字符时,其存储效率,查询性能上有什么区别?


------解决方案--------------------
没什么区别
因为定义10也好4000也好都会根据你实际存储的数据的长度走
也就是说定义10的存了5个字节和定义4000存5个字节,存储大小都是一样的。

------解决方案--------------------
哈哈,定义10的当然存不了10以上的
------解决方案--------------------
探讨
哈哈,定义10的当然存不了10以上的

------解决方案--------------------
如果定义varchar2(10)和varchar2(4000)存储最大10个字节的内容,在数据库存储上区别不大,数据库效率也影响不大,但是会带来其它很多的问题,最影响应用的效率。
现举两个出问题的例子:
1.如果你的表中存在多个varchar2(4000)的列,将导致不能创建符合index,创建时报ora-01450错误。
 没有符合index,很多时候势必影响应用效率。
2.假如你定义了varchar2(4000),那么对于应用代码来说,我必须定义String length为4000的变量来容纳列中的值,因为应用不知道你的列的最大length是10啊,也就是说应用服务器必须额外的分配一些浪费的内存来存储取得的列值;大量的这量代码的存在,消耗了宝贵的内存,必然导致应用效率下降。

所以说,用多少字节,定义多少字节的,不要随便用varchar2的极限。




引用楼主 ann790914 的帖子:
create table t1(
f1 varchar2(10),
f2 varchar2(10),
f3 varchar2(10),
f4 varchar2(10),
f5 varchar2(10)
)

create table t2(
f1 varchar2(4000),
f2 varchar2(4000),
f3 varchar2(4000),
f4 varchar2(4000),
f5 varchar2(4000)
)
上述两个表定义在实际存储数据长度为10个以内字符时,其存储效率,查询性能上有什么区别?

------解决方案--------------------
符合index 是 复合index,笔误。呵呵

探讨
如果定义varchar2(10)和varchar2(4000)存储最大10个字节的内容,在数据库存储上区别不大,数据库效率也影响不大,但是会带来其它很多的问题,最影响应用的效率。
现举两个出问题的例子:
1.如果你的表中存在多个varchar2(4000)的列,将导致不能创建符合index,创建时报ora-01450错误。
没有符合index,很多时候势必影响应用效率。
2.假如你定义了varchar2(4000),那么对于应用代码来说,我必须定义String length为4000的变…

------解决方案--------------------
符合index 是 复合index,笔误。呵呵

探讨
如果定义varchar2(10)和varchar2(4000)存储最大10个字节的内容,在数据库存储上区别不大,数据库效率也影响不大,但是会带来其它很多的问题,最影响应用的效率。
现举两个出问题的例子:
1.如果你的表中存在多个varchar2(4000)的列,将导致不能创建符合index,创建时报ora-01450错误。
没有符合index,很多时候势必影响应用效率。
2.假如你定义了varchar2(4000),那么对于应用代码来说,我必须定义String length为4000的变…

------解决方案--------------------
同意楼上的,要根据实际需要进行定义,哪怕以后需要的话可以再修改大点都可以,还是很有影响的!
------解决方案--------------------
探讨
引用:
哈哈,定义10的当然存不了10以上的

对的,
效率上没什么差别,反正VARCHAR 本身就是可变长度的

------解决方案--------------------
效率没啥区别,只是这样设计数据库的哥们应该反省一下。
------解决方案--------------------
赞成4楼的观点
根据实际要求来定义字段的长度
  相关解决方案