Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Informix列的最大长度是多少,可以增加吗?_Sql_Database_Informix - Fatal编程技术网

Sql Informix列的最大长度是多少,可以增加吗?

Sql Informix列的最大长度是多少,可以增加吗?,sql,database,informix,Sql,Database,Informix,我正在尝试创建具有以下内容的表: 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, CL

我正在尝试创建具有以下内容的表:

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,
    STR0 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语句在语法上有效,并且您提供了确切的错误消息,则会有所帮助。重新格式化并更正语法后,该语句如下所示:

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,
    str0            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)
);
并且,当在具有2KB页面的系统上运行时,错误消息为:

SQL -550: Total length of columns in constraint is too long.
获取错误消息简要说明的标准方法是
finderr
;它说:

$ finderr -550
-550    Total length of columns in constraint is too long.

The total size of all the columns listed in a UNIQUE, PRIMARY KEY, or
FOREIGN KEY clause is limited. The limit depends on the database server
in use, but all servers support a total of 120 bytes. The limit is the
same as the restriction on the total size of all columns in a composite
index. For additional information, see the CREATE TABLE statement in
the IBM Informix Guide to SQL: Syntax.

$
“总计120字节”应为“总计至少120字节”;这个下限适用于Informix SE。在IDS(Informix Dynamic Server)中,下限为255字节,但在较新的系统中,下限更大,当页面大小较大时,下限也更大

你有多种选择

    你可以考虑为什么你的名字每个都需要255个字符-这是明智的(比如说,64就足够了)?
  • 如果您的服务器版本足够新(我相信是10.00或更高版本),则可以在具有更大页面大小的dbspace中创建表
由于键的最大值为3*255+(20/2+1)=776字节,根据经验,每页需要能够存储5个最大长度键值+ROWID/FRAGID开销(8字节),因此需要4KB的页面大小。(如果您一直在AIX上运行,您可能不会注意到这个问题。)

另外,您不应该在VARCHAR(255)中存储日期值;您应该使用DATE或DATETIME YEAR TO DAY(一种奇怪的拼写日期的方式-尽管底层格式不同,在磁盘上使用5字节而不是4字节表示普通日期),或者DATETIME YEAR TO SECOND(一种拼写时间戳的有趣方式),或者。。。“num0、num1、num2”字段也很可疑;如果要存储数字,请使用数字或十进制——在大多数IDS数据库中,十进制(20)表示20位浮点十进制数

编辑以添加:

而且,为了回答直接的问题,VARCHAR列的长度最多只能为255字节;LVARCHAR列最多可达32kb左右;字符列的大小可达32KB;文本列最多可达2GB,CLOB列甚至可以更大。行的总长度限制在32 KB左右(但字节、文本、BLOB和CLOB列作为固定大小的描述符计入32 KB的总长度-实际数据存储在行之外)。有一些版本依赖性我没有提到——如果您使用的是IDS 10.00或更高版本,这是准确的