ここから本文です

PostgreSQL8.2.3のVARCHARの桁数(Byte数)についてどう扱うべきか教えてください。

PostgreSQL8.2.3のVARCHARの桁数(Byte数)についてどう扱うべきか教えてください。

PostgreSQL8.2.3にEUC-JPでDBを作成しています。
VARCHAR(20)のカラムに20文字の全角文字列を挿入するとエラーとならず、後半10文字が切り捨てられて挿入されます。
しかし、そのレコードを検索する際は、条件に前半10文字をいれてもヒットせずに20文字全てを入れるとヒットします。
これはこういうものなのでしょうか?また、このようなデータが登録されていても問題は発生しないのでしょうか?
また、VARCHARにはデータのByte数+4Byteが登録されると聞いたのですが、全角20文字を登録するカラムはVARCHAR(44)とすべきなんでしょうか?
参考となるサイトなどご存知でしたらURLなども教えていただけると助かります。

閲覧数:
634
回答数:
1

違反報告

ベストアンサーに選ばれた回答

マニュアルでは微妙な表記ですが、挿入時に全部の文字列が入るようです。
(システムで圧縮して保存されるようだ)
ただし、取り出しは20桁までなんでしょう。
たぶん、他のDBMSでも同様な問題が発生する可能性はあります。
なので、通常は充分なVARCHARサイズを用意しているか、格納時に切り捨てを行う処理を入れます。

PostgreSQLでは他のDBと違ってVARCHARの桁数指定を省略することが出来ます。
この場合は1Gまでの文字列を格納することができるようです。
他には、VARCHARではなく、TEXT型も使えます(PostgreSQL独自の型です)
こうすることにより、上記の問題を回避することが出来ます。
※もちろんキーを付けていないと検索時間に影響があります


マニュアルは、日本PostgreSQLユーザ会のサイト
http://www.postgresql.jp
の該当するバージョンのドキュメントを参照ください。

(追加)
>CSEというツール
あれ、汎用の便利ツールですが、PostgreSQLは専用の便利ツールがあります。(PgadminⅢ)
Windows用PostgreSQLをお勧めインストールすると同時にインストールされますので、一度お試しください。
http://codezine.jp/a/article/aid/1392.aspx
にwindows版のインストール方法が載っています・・・ご参考まで。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる