“约束中的列总长度太长”在Informix中的含义是什么?

时间:2008-10-05 15:42:28

标签: sql informix

我得到约束中的列总长度太长。来自以下

的错误
sql] Failed to execute:   CREATE TABLE GTW_WORKFLOW_MON ( WORKFLOW_NAME VARCHAR(255) NOT
NULL, WORKFLOW_LOADED NUMERIC(20) NOT NULL, ACTIVITY_NAME VARCHAR(255) NOT NULL, FLAGS    
INTEGER NOT NULL, MONITOR_NAME VARCHAR(255) NOT NULL, CLASSNAME VARCHAR(255) NOT NULL, S

TR0 VARCHAR(255), STR1 VARCHAR(255), STR2 VARCHAR(255), NUM0 VARCHAR(255), NUM1 
VARCHAR(255), NUM2 VARCHAR(255), DATE0 VARCHAR(255), DATE1 VARCHAR(255), DATE2 
VARCHAR(255), PRIMARY KEY (WORKFLOW_NAME,WORKFLOW_LOADED,ACTIVITY_NAME,MONITOR_NAME) )

  [sql] java.sql.SQLException: Total length of columns in constraint is too long.

2 个答案:

答案 0 :(得分:3)

您的主键约束是785字节(255 + 20 + 255 + 255)。如果将数据库页面大小增加到4K,它应该可以正常工作。如果您需要的列与您定义的列一样宽,也应该重新考虑。

我找到了一个讨论组,工程师Radhika Gadde describes表示最大索引大小与页面大小有关。他说:

创建表时遇到的错误。 最大索引密钥长度可以按如下方式计算:

[(PAGESIZE -93)/ 5] -1

喜欢2k [(2048-93)/ 5] -1 = [1955/5] -1 = 391-1 = 390

如果PAGESIZE是4K 它是[(4096-93)/ 5] -1 = 4003 / 5-1 = 800-1 = 799

答案 1 :(得分:0)

以上答案已完成。但想到添加一些有用的链接,以防有人再次遇到这个问题。 Informix上的Pagesize依赖于操作系统。根据我最近的经验,我发现它在Win 2008上是4K,OSX - Lion和SUSE EL4上的2K。 您可以使用'onstat -D'找到页面大小。

我用这种经历写了http://sumedha.blogspot.com/2013/03/how-to-increase-informix-page-size.html。 来自IBM的以下文档链接也非常有用。

http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp?topic=%2Fcom.ibm.admin.doc%2Fids_admin_0564.htm