• ベストアンサー

version7,version8 の型の扱い

PostgreSQL の 7 から8 へマイグレーション作業をしている者です。 int型で not null制約のあるカラム「id」 の値から、''(空)であることを判定する時、 version7 では、 $sql = "select * from tbl_name where id <> ''"; のSQL文で動いていたようですが、 version8 では、 型の扱いが厳しくなった訳か、syntax error となります。 この場合version8 では、 $sql = "select * from tbl_name where id <> 0"; が、 ''(空)であることを判定するSQL文と考えてよいでしょうか? ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>PostgreSQL の 7 から8 へ 7とか8とかでは、範囲が広すぎます。もっと具体的に、バージョンを明記しましょう。 >型の扱いが厳しくなった訳か、syntax error となります。 型の扱いの問題なら、syntax errorでなく、別のエラーになるように感じます。 具体的なSQLの記述、エラーメッセージの内容といったものを示せませんか? 予約語の追加といったものなら、syntax errorも考えられますけど。 ともかく、記載内容が具体的でなく、根拠の疑わしい推測だけなので、他人が適切に回答するのは困難です。

gahosky
質問者

お礼

大変失礼しました。 書き直します。

gahosky
質問者

補足

versionは、7.2.2 から 8.1.11 への移行です。 エラーは、 ERROR: invalid input syntax for integer: "" でした。 よろしくお願い致します。

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

ver7.3で、整数フィールドへの入力に空文字列を指定することが出来なくなったようです。それ以前は空文字列は0と解釈されていたそうです。 参考URLのページの「バージョン 7.3 への移行」節に説明が有ります。 したがって、元のver7.2.2のDBでは、SQLでは空文字列を格納するように記述されていても実際には0が格納されていたのだと思います。 おっしゃる通り、ver8.1.1ではWHERE句で「[数値項目] <> 0」とすることで元と同じ動作をすると思われます。

参考URL:
http://www.postgresql.jp/document/pg837doc/html/release-7-3.html
gahosky
質問者

お礼

ご回答ありがとうございます。参考URLもつけて頂いてありがとうございます。

関連するQ&A