2008-10-05 113 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