“约束中列的总长度太长”错误在Informix中意味着什么?

StackOverflow https://stackoverflow.com/questions/172156

  •  05-07-2019
  •  | 
  •  

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

的错误
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.
有帮助吗?

解决方案

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

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

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

[(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

其他提示

以上答案已完成。但想到添加一些有用的链接,以防有人再次遇到这个问题。 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top