12
返回列表 发新帖
楼主: bitiwyh

[精华] DB2的VARCHAR长度

[复制链接]
论坛徽章:
10
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:击剑
日期:2008-10-24 13:24:30ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22咸鸭蛋
日期:2012-03-23 20:40:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20奥运会纪念徽章:击剑
日期:2012-10-22 14:00:49马上加薪
日期:2014-12-12 14:55:07
11#
 楼主| 发表于 2006-2-20 19:28 | 只看该作者
嗯,照版主的说法,似乎是对起来了.
32K大小表空间的长度为32677,除去默认的(nullable?)的rowid 5bytes
正好是可以分配的32672(SQL Limits).
那么在create table test(id char(1))后还有32672-1-1=32670.
再alter table test add ex varchar(1)后,应该有32670-1-1-2=32666
只是接下来有点不明白:
alter table test add ex2 varchar(32664)
or
alter table test add ex2 varchar(32665) not null default ''
为什么不是32663/32664呢?

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主1段
日期:2012-05-15 15:24:11管理团队成员
日期:2013-05-02 11:19:53马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:13:20
12#
发表于 2006-2-21 09:42 | 只看该作者
"32K大小表空间的长度为32677,除去默认的(nullable?)的rowid 5bytes"

你已经多减了1 byte

使用道具 举报

回复
论坛徽章:
10
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:击剑
日期:2008-10-24 13:24:30ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22咸鸭蛋
日期:2012-03-23 20:40:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20奥运会纪念徽章:击剑
日期:2012-10-22 14:00:49马上加薪
日期:2014-12-12 14:55:07
13#
 楼主| 发表于 2006-2-21 11:11 | 只看该作者
嗯,原来是这样.自己也想rowid应该不会是nullable而占一个字节.

只是这样一来,32677-4=32673?
为什么可以创建create table test(id varchar(32672))
不能创建create table test(id varchar(32673) not null default '')
??

按理解,觉得最长应该是32670.(32673-3)...
版主推荐一本书可以了解一下这些细节?
目前只用sql reference/message reference.
谢谢.

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主1段
日期:2012-05-15 15:24:11管理团队成员
日期:2013-05-02 11:19:53马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:13:20
14#
发表于 2006-2-22 14:36 | 只看该作者
1. 如果非空,理论上可以32673,但是没有必要为了这一个byte定义不同的varchar max_length吧?

2. 问的好 我也觉得应该是32670,那两个字节的varchar长度在那里存呢?

使用道具 举报

回复
论坛徽章:
0
15#
发表于 2006-2-26 14:38 | 只看该作者
原来如此

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2006-12-26 10:19 | 只看该作者
我现在改变已有表字段长度为8000时候报行长度超过"32677",大侠客们怎么办啊?
我的表空间是32K页的啊?怎么办啊?

使用道具 举报

回复
论坛徽章:
41
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26紫蛋头
日期:2012-11-22 10:14:302013年新春福章
日期:2013-02-25 14:51:24鲜花蛋
日期:2013-07-09 19:31:16本田
日期:2013-11-16 13:09:52马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
17#
发表于 2014-1-13 10:19 | 只看该作者
m505 发表于 2006-2-20 14:56
1. nullable的字段多加一个字节
2. varchar加两个字节(记长度)
3. rowid = 4 byte

确实纠正了一个错误的认识

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表