暂无图片
Oracle varchar2变长 , varchar2(10)和varchar2(100)有什么区别?
我来答
分享
豆豆
2021-08-25
Oracle varchar2变长 , varchar2(10)和varchar2(100)有什么区别?

创建表时,为了尽量避免字段长度不够的问题,加上varchar2是变长的,是不是可以尽量往大了建,存储同样的字符串varchar2(10)和varchar2(100)有啥区别?

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
文成

猜测:
varchar在数据存储的时候会记录一个指针初始位置和最大值
当去读取数据的时候,会根据指针和最大值去进行数据读取和探查
所以 当varchar很长的时候,一方面不能很好的规范前台数据存储,另外一方面在数据读取的时候可能会去遍历长度会影响效率,在修改的时候可能涉及到字段长度的改变,引起存储的迁移。
这个时候可能要结合char来进行说明,char是定长,那么在存储的时候占用的存储空间是固定的,不足的部分使用0填充,所以在数据读取和存储的时候可以很确定的知道数据最后的位置在什么地方,不会存在数据存储的迁移。

以上都是猜测,可以使用实验验证一下读取,修改,插入的效率。

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
ziyoo0830

可存储长度不同。 都是varchar2啊。

暂无图片 评论
暂无图片 有用 0
打赏 0
豆豆
题主
2021-08-25
创建表时,为了尽量避免字段长度不够的问题,加上varchar2是变长的,是不是可以尽量往大了建,存储同样的字符串varchar2(10)和varchar2(100)有啥区别?
JiekeXu
暂无图片

varchar2(100) 表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小。由于描述的是字节,因此,保存汉字等字符时,如果你的数据库用的是GBK编码,那么一个汉字将占用2个字节,最多能存50个汉字,如果你的数据库用的是UTF8编码,那么一个汉字将占用3个字节,最多能存33个汉字。

varchar2(10) 表示最大字节数是10,该字段最多能容纳10个字节.

如果varchar2(10)放“abc” varchar2(100)也放“abc”,那么他们的空间大小是一样的!

暂无图片 评论
暂无图片 有用 0
打赏 0
豆豆
题主
2021-08-25
如果是这样,那varchar2(n),后面的数字仅仅是为了限制字符串最大长度吗? 在不考虑最大长度的问题,为了方便,我全部设置成varchar2(4000)这种可以么?
豆豆

如果是这样,那varchar2(n),后面的数字仅仅是为了限制字符串最大长度吗? 在不考虑最大长度的问题,为了方便,我全部设置成varchar2(4000)这种可以么?

暂无图片 评论
暂无图片 有用 0
打赏 0
ALFNAE

自带长度约束吧,假设没有显示定义约束,给一个身份证号设置成varchar2(4000),可能就要变成无效数据了,不利于数据管理和系统正常使用。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏