[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も入れた日には、文書の読み込み速度が恐ろしいことになりそうですが、まぁ理論値ということで(^^;
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。