[pgsql-jp: 27086] Re: 文字列長制限に適したデータ型

Naofumi Kondoh nkon @ shonan.ne.jp
2002年 8月 20日 (火) 10:16:17 JST


ソフト工房の近藤です。

Mitsunaga Hiroko wrote:
> 光永です。

...略....

>>>文字列長を制限してテーブルを作成したいのですが、
>>>PostgreSQLではTEXT型が推奨とのことで、
>>>CHECK制約を用いて下記のように作成しました。
...略....
>>>VARCHAR型を使用するのと、どちらがよろしいでしょうか?
>>
>>単純に文字列長制限の問題であれば、VARCHARですね。

> 「text型はchar、varchar に比べて効率が良い」とされていますが、
> この点に関してはいかがでしょうか?(「効率がよい」の意味を具体的にお教え
> いただけるとありがたいです)

ソースコードを読んでいないので推定ですが、VARCHAR / CHAR
型だと文字数の制限チェック処理時間と、文字数情報の格納分
だけDB領域を余分に必要とするということではないでしょうか。

なんでもそうですが、静的に効率が良いということと、実際の
使用条件で有意差があるかどうかは別問題です。実際の使用条
件に近い状態でテストしてみるのが一番です。
# テスト結果は ML に投稿してもらえると嬉しい。

なお、新しいversion では、VARCHAR/CHAR は、バイト数で
はなく、文字数です。マルチバイト文字でバイト数で制限
したいのであれば、VARCHAR/CHAR だけでは実現できません。
また、文字数超過の場合は、ONCHECK 同様エラーになり、
SQL 文が実行されませんので、エラー処理が必要です。
PostgreSQL で文字数チェックさせるよりも、プログラムで、
文字数又はバイト数チェックをして、超過時のエラー処理
まで一括してプログラムした方がよいのではないでしょうか。

> あと、VARCHARは「SQL92互換」とのことですが、この点についてもパフォーマン
> スに即した長所の例をあげていただけるとありがたいです。

質問の意味がよくわからないのですが、SQL92 互換の書き方
にしておけば、他のDBに移行するときに楽**かも**しれ
ないとか、SQL92 修得者にわかりやすいという程度の問題では。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon @ shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/      http://www.shonan.ne.jp/~nkon/
2002-08-27(火)19:00-21:30 第5回 JPUG 業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/





pgsql-jp メーリングリストの案内