Cra*_*gus 2 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,
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)
)
Run Code Online (Sandbox Code Playgroud)
由于列长度不够大,它会失败.
Jon*_*ler 11
如果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)
);
Run Code Online (Sandbox Code Playgroud)
并且,当在具有2KB页面的系统上运行时,错误消息是:
SQL -550: Total length of columns in constraint is too long.
Run Code Online (Sandbox Code Playgroud)
获得错误消息的简要说明的标准方法是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.
$
Run Code Online (Sandbox Code Playgroud)
'总共120个字节'应该是'总共至少120个字节'; 下限适用于Informix SE.在IDS(Informix Dynamic Server)中,下限为255个字节,但在较近的系统中较大,在页面大小较大时也较大.
你有多种选择.
由于密钥最大为3*255 +(20/2 + 1)= 776字节,并且经验法则是您需要能够存储5个最大长度密钥值+ ROWID/FRAGID开销(8个字节)每页,您需要4 KB的页面大小.(如果你在AIX上运行,你可能不会注意到这个问题.)
此外,您不应该在VARCHAR(255)中存储日期值; 你应该使用DATE或者DATETIME YEAR TO DAY(拼写DATE的一种奇怪方式 - 尽管底层格式不同,在磁盘上使用5个字节而不是4个用于普通DATE),或者可能是DATETIME YEAR TO SECOND(一种有趣的方式)拼写TIMESTAMP),或者......'num0,num1,num2'字段也是可疑的; 如果它们用于存储数字,则在大多数IDS数据库中使用NUMERIC或DECIMAL - DECIMAL(20)表示20位浮点十进制数.
编辑添加:
并且,为了回答直接问题,VARCHAR列只能长达255个字节; LVARCHAR列最大可达32 KB; CHAR列最大可达32 KB; TEXT列最多可以为2 GB,CLOB列可以更大.行的总长度限制为大约32 KB(但是BYTE,TEXT,BLOB和CLOB列计为固定大小的描述符,总计为32 KB - 实际数据存储在行外部).我没有提出一些版本依赖项 - 如果您使用的是IDS 10.00或更高版本,这是准确的.