Accessマクロの流用開発案件で気づいたけど、Accessのテーブルプロパティの一つ「フィールドサイズ」。
流用開発時、流用元のテーブル定義にテキストフィールドのフィールドサイズがデフォルトより小さく設定されていたので、想定していたデータが全て入っておらず、ちょっと躓くことがあった。
そこで気になったのだけど、そもそもフィールドサイズってデフォルト値未満に設定する必要あるのか?
詳しく調べてみた。
フィールドサイズの使い方
Accessでは数値やテキストフィールドの場合、フィールドサイズを設定することができる。
例えば「短いテキスト」フィールドなら、デフォルト値は「255」となっているが、任意に変更することが可能である。
フィールドサイズに設定された値を超えてデータが入った場合、フィールドサイズ分のデータしか格納されない。
(例.フィールドサイズが3の場合、「12345」のデータが来ても「123」までしか格納されない)
フィールドサイズの影響
とあるサイトに「フィールドサイズを設定すると、設定値に応じた領域が確保される」と書かれていたので、設定することでファイルサイズやメモリ使用量を節約できるのかな?と思い、早速調査してみた。
まずは「短いテキスト」のフィールドサイズ「255」で作成。
データを適当に5000件作成してみる。
次に作成したファイルをコピーして、フィールドサイズを「5」に変更して保存してみる。
ファイルサイズで比較してみると、フィールドサイズを小さくした方がむしろ増えた。
データベースの最適化を双方のファイルにしてみると…
それでもファイルサイズは「255」の方が小さい。
ファイルサイズは関係なさそうだけどメモリは?
メモリ使用量も、むしろ「255」の方が小さい…。
いよいよフィールドサイズをデフォルト値から変更するメリットが分からなくなって、キーボード投げたくなったけど、灯台下暗し、Microsoftサイトに以下の記載があった。
テーブルの数値フィールドのフィールド サイズ プロパティを変更することで、テーブル内の各レコードで使用される領域サイズを調整できます。テキスト データを格納するフィールドのフィールド サイズも変更できますが、この操作を行っても、使用される領域サイズには大きな効果はありません。
問題はここ!
「テキスト データを格納するフィールドのフィールド サイズも変更できますが、この操作を行っても、使用される領域サイズには大きな効果はありません。」
なーんだ、じゃあテキストフィールドならあえてデフォルトより小さく設定する必要ないじゃないか、ということで流用元の謎設定に嵌められたけど、今後テキストフィールドの場合はデフォルトから変えない!ってことでひとまず納得。