Takenoff Labs » Notes/Domino » DB設計 » ノーツのフィールドには何KBまで入るか

[Notes/Domino] ノーツのフィールドには何KBまで入るか

開発をやっていると、よく訊かれる質問に、「ノーツのフィールドって何KBまで入るの?」というのがあると思います。こないだウチに入っているベンダーさんが誤った回答をしていたのを耳にしたので(^^;、エントリしてみますです。

基本的には32KBだが、LMBCSに注意

教科書的な説明だと、「32KBまで入力できる」が解答となります。ただし、ノーツは内部的に LMBCS(リンビックス)という文字セットでデータを保管しています。LMBCS では、「ダブルバイト文字と半角カナは3バイトで保管」という規則があります。したがって、32KBといっても、全角文字だと1万文字強しか入らないことになります。(といっても、結構な量ですね。)

アイテムのサイズの確認は、文書のプロパティの2番目のタブで見てください。LotusScript の LenBP では LMBCS から変換された後の値を返しますから、「保管される文字列のサイズ」を知りたいのであれば、LenBP を使ってはいけません。NotesItem.ValueLength のほうを使ってください。(※ただし、ValueLength は、アイテムヘッダのサイズも含みます。また、文書を開いているときと閉じているときなどでサイズが変わりますので要注意です。)

Summary フラグによっても違う

Summary フラグがオフのフィールドは、実は64KBまで入ります。API をやればわかりますが、アイテムのサイズは2バイトのアドレスで管理されており、2バイト=65535=64KBなので、1アイテムの最大サイズは64KBということになっているのです。32KBというのは、Summary フィールドだからなのです。

が、フィールドを明示的に配置すると自動的に Summary フラグが立ちますから、実質的に「入力できる」値は32KBということで変わりません。スクリプトでバックエンドで値を入れる分には、Summary フラグをオフにしさえすれば 64KB までいける、というわけです。(まぁそこまで入れるのは推奨できませんが。)

文書全体のサイズに注意!

1フィールドが32KBバイトだからといって、油断してはいけません。Summary フィールドの合計サイズが64KBを越える場合も、保存時にエラーとなってしまいます。フィールドが多数ある場合に、「1フィールド32KBです」とだけ回答してしまうと、ガンガン入力されてしまって、文書全体の64KBを超えてしまって保存できなくなる、というケースがあるでしょう。(管理人はそうなってしまったDBを見たことがあります……。)

ここらへんのことについては、以前エントリした「Summaryフラグに関するあれこれ」をご参照ください。

リッチテキストは1GBまで

今まではテキストフィールドの話で、リッチテキストフィールドだと、最大1GBまで入ります。ただし、1段落は64KBまで、という制限もあります。

テキストだけで1GBも入れた日には、文書の読み込み速度が恐ろしいことになりそうですが、まぁ理論値ということで(^^;

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

トラックバックURL :

Navigation

前の記事(カテゴリ内):

次の記事(カテゴリ内):

前の記事(日付順):

次の記事(日付順):

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 9676 to the field below: