MDB2でPostgreSQL

だが次なる悪夢が待っていた。

MDB2の結果セットで取得した検索結果のカラム文字列が…何故か全て小文字に化けている。他の部分では全て大文字小文字を区別するようにしているので大変困るのだが、どこで小文字に化けているのか見つけられない。

たしかに標準的なPostgreSQLではカラムの文字列は全て小文字なのだが、テーブル作成時にわざわざ大文字小文字を区別する書式で指定しているのでデータベースは指定通りに構築できている。

しかるに、結果セットは全部小文字…

調べてみると救いようのない表記を発見した。

PEARのマニュアル

field_case
integer
CASE_LOWER あるいは CASE_UPPER のいずれかで、 フィールド名/テーブル名を強制的に小文字/大文字に変換します。

変換するな(怒)。当たり前だが情報量が減るではないか。

ソースを見て「変換しない」ための定数を探してみる必要があるのか。なんだかMDB2に切り替えるのもいやになってくるのだが。


気分的にかなり投げ出しかけたが、

portability
integer
可搬性に関する定数。

MDB2_PORTABILITY_NONE*1にすれば良いということが分かった。データベース接続を行うコードは全体で一つ二つしかないように設計していたので、いとも簡単に修正できてほっとする。

名前からして「データベースの違いを吸収するためのお節介」と言うことらしいが、それなら「MDB2を使う時の約束事」として「テーブル名、フィールド名は全て小文字にすること(ケースセンスにしないこと)」というのを書いておいて下さい…*2

正確にはこちらを参照するべきなのか。 PEAR :: Manual :: 可搬性 どっちにしても、可搬性を停止する以外に救いはないが。

*1:というかこれはMDB2パッケージで定義された定数なので、結局は数値で0

*2:というか、世の中にはどうやってもケースセンスなテーブル名やフィールド名が付けられないデータベースがあるのだろうか。