2008-10-05 39 views
1

我得到的约束中的列的总长度太长。从以下错误“constaint中的列的总长度太长”是什么意思?Inrix是什么意思?

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. 
+0

请选择帮助你最答案 - 如果其中的任何帮助都没有。 – 2008-10-18 05:11:34

回答

3

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

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

您在创建表格时收到哪个错误。

[(PAGESIZE -93)/ 10] -1-

像2K是 [(2048-93)/ 5] -1 = [1955: 最大索引关键字长度可以如下计算/ 5] -1 = 391-1 = 390

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

+0

Nit pick - NUMERIC(20)等价于DECIMAL(20)并占用(20/2)+1 = 11个字节。但你的基本答案是正确的。 – 2008-10-09 18:29:04

0

以上答案是完整的。但是如果有人再次遇到此问题,请考虑添加一些有用的链接。 Informix上的页面大小取决于操作系统。根据我最近的经验,我发现它在Win 2008上是4K,在SUSE EL4上是OSX - Lion和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