我得到约束中的列总长度太长。来自以下
的错误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 :(得分: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的以下文档链接也非常有用。