DB2 的Max Key Length

本文介绍了一个关于DB2数据库联合唯一索引长度过长导致的问题及其解决办法。当索引长度超过所在表空间的MaxKeyLength时,将无法创建。文章提供了具体的MaxKeyLength与表空间页大小的关系,并给出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天 一个同事在创建联合唯一索引的时候报了以下这个错

The primary key, unique key, or table partitioning key identified by "ATTRIBUTE_ROWID_UN" is too long or has too many columns.. SQLCODE=-613, SQLSTATE=54008, DRIVER=4.14.113

在印象中好像数据库对联合索引的列是没有限制的 因为联合索引的列一定不会超过所在表的列 所以表空间应该有足够的长度容下它,其实这是不对的。


首先普及几个基本知识 1.如果正在创建的表 他的column长度超过了默认表空间 DB2会自动为他指定更大的表空间(如果有个话)。

                                         2.在表上创建的索引如果不指定表空间的话 会默认跟表在一个表空间里。

                                         3.主键和唯一约束不能定义在long varchar的column上。


就DB2而言 有一个Max Key Length的概念 ,它的长度是根据索引所在表空间的page size决定的。

      下面有一个官方给的列表

Max Key Length  Page size
--------------  ---------
1K              4K
2K              8K
4K              16K
8K              32K

所以 这次错误的原因是表所在的表空间是4K的 但是联合唯一索引的长度超过了Max Key Length (1K).


解决方案:


创建联合唯一索引的时候把索引指定到更大的表空间。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值