[pgsql-jp: 36826] Re: 「PHP4徹底攻略改訂版」で、比較演算子が表示されません。

Takao Kato sirius @ jp.fujitsu.com
2006年 3月 6日 (月) 10:18:26 JST


加藤@川崎です。

マンモス本を読んでいないので、(実体験に基き)たぶんのレベルで記載します
と、

At Sun, 05 Mar 2006 13:29:58 +0900,
seijun86 @ yahoo.co.jp wrote:
> 
> PostgreSQL7.4.12で、「PHP4徹底攻略改訂版」で列のデータ型を「varchar(n)」にする
..snip..
> 手順2.125ページのお天気日記テーブルで、
> tenki TEXT DEFAULT '晴れ'
> とあるのを
> tenki varchar(20) DEFAULT '晴れ'
> に変更する。
> 
> 手順3.
> ex6/ex6.phpを実行させ、検索フォームをクリックする。そうすると、天気のところの
> ドロップダウンリストボックスに比較演算子が何も入っていないようです。従って、
> 「晴れ」とかを入力しても、SQL構文にエラーが発生し、検索できません。

なぜ変更したんでしょう?と言うところから疑問があります。容量とか気にし
ました?(7.4.x/最終実体に違いはあるものの)varchar/textともに同じ容量で
済みますよ。逆にvarcharで大きさを指定すると痛い目に合います。実際に別
DBMSの実装のアプリをPostgreSQLに移植しようとして痛い目に合いました。。。
# そちらのDBMSは後述の対応をしているためアプリ開発者はエラーを検出でき
# ていないようです。。。。

以前(7.2だったかな)はvarchar(n)のカラムにnを越える文字列を入力した場合、
自動的に溢れた部分をカット(丸め処理)してエラーにならないような動作をし
ていました。最近(と言ってもそろそろ2年くらいたつ?)では丸め処理が適用
されなくなっており、もしnよりも長い文字列を入力した場合は(当然)エラー
が戻ってきます。入力者(アプリ)側で厳密な値チェックが必要になりました。

このためvarchar型のカラムに入力する前に溢れ部分を削除してやる処理が必
要になります。もしどうしても text→varchar 変更したいのであれば、丸め
処理を勝手にしてくれるバージョンを落して使うか、わざわざ変更して利用し
ようとしているわけで「貴方自身が開発者」としてアプリ側の改造を行なうか
して対処しましょう。せっかくの図書スクリプトなんですから、改造して動か
せるようにし、ご自身のPHP/PostgreSQL能力のスキルアップをはかってくださ
い。


それでは
-------------------------------------------------------------
加藤@川崎



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