legone2008 发表于 2009-12-31 15:36

DB2建表遇到的一个问题

环境:RedHat Enterprise Linux AS4 + DB2 V9.5
建表脚本如下:DROP TABLE s_ds_proj;
CREATE TABLE s_ds_proj
(
  ds_project_name   varchar(1024)   NOT NULLDEFAULT ' '   primary key    ,
  ds_server_id      integer         NOT NULLDEFAULT 0          ,
  app_id            integer         NOT NULLDEFAULT 0         ,
  ds_project_stat   integer         NOT NULLDEFAULT 0         ,
  stat_msg1            varchar(128)      NOT NULLDEFAULT ' '         ,
  stat_msg2         varchar(2048)      NOT NULLDEFAULT ' '   ,
  ext_column_1      integer         NOT NULLDEFAULT 0         ,
  ext_column_2      integer         NOT NULLDEFAULT 0         ,
  ext_column_3      varchar(256)      NOT NULLDEFAULT ' '      ,
  ext_column_4      varchar(256)      NOT NULLDEFAULT ' '      
 
);

报错如下:
DB21034EThe command was processed as an SQL statement because it was not a
valid Command Line Processor command.During SQL processing it returned:
SQL0613NThe primary key, unique key, or table partitioning key identified by
"DS_PROJECT_NAME..." is too long or has too many columns.SQLSTATE=54008
大意就是:主健或UNIQUE约束太长或者包含了太多的列

但是把其中stat_msg1的字段长度调整为2048就可以创建成功。或者增加几个字段也可以创建成功,
这是什么原因,难道主键长度和非主键的长度必须达到一定比例才行?

ppgo 发表于 2009-12-31 23:14

回复 #1 legone2008 的帖子

索引键长度限制基于索引使用的表空间的页大小:

最大键长度      页大小
-----------------------
1K            4K
2K            8K
4K            16K
8K            32K

你的页大小应该是4k,调整第一列主键长度<=1022就可以了
页: [1]
查看完整版本: DB2建表遇到的一个问题