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バイト'である必要があります。その下限はInformixSEに適用されます。IDS(Informix Dynamic Server)では、下限は255バイトですが、最近のシステムでは大きくなり、ページサイズが大きくなると大きくなります。
さまざまなオプションがあります。
- 名前がそれぞれ255文字である必要がある理由を考えることができます-それは賢明ですか(たとえば、64文字で十分です)?
- サーバーのバージョンが十分に新しい場合(10.00以降だと思います)、より大きなページサイズのDB領域にテーブルを作成できます。
キーは最大3*255 +(20/2 + 1)= 776バイトであり、経験則では、5つの最大長のキー値+ ROWID / FRAGIDオーバーヘッド(8バイト)を格納できる必要があるためです。 1ページあたり、4KBのページサイズが必要になります。(AIXで実行していれば、おそらく問題に気付かなかったでしょう。)
また、日付の値をVARCHAR(255)に保存しないでください。DATEまたはおそらくDATETIMEYEARTO DAY(DATEのスペルの奇妙な方法-基本的な形式は異なりますが、プレーンなDATEの場合は4バイトではなく5バイトを使用します)、またはDATETIME YEAR TO SECOND(面白い方法TIMESTAMPのスペル)、または...'num0、num1、num2'フィールドも疑わしいです。数値を格納する場合は、NUMERICまたはDECIMALを使用します。ほとんどのIDSデータベースのDECIMAL(20)は、20桁の浮動小数点10進数を意味します。
追加するために編集:
また、直接の質問に答えるために、VARCHAR列の長さは最大255バイトです。LVARCHAR列は最大約32KBです。CHAR列は最大32KBです。TEXT列は最大2GBにすることができ、CLOB列はさらに大きくすることができます。行の合計の長さは約32KBに制限されています(ただし、BYTE、TEXT、BLOB、およびCLOB列は、合計32 KBの固定サイズ記述子としてカウントされます。実際のデータは行の外部に格納されます)。私が明らかにしていないバージョンの依存関係がいくつかあります-IDS10.00以降を使用している場合、これは正確です。