[pgsql-jp: 26087] Re: 7.2 ODBC ドライバで SQL_DESC_OCTET_LENGTHを取得すると 0 になる。

Hiroshi Inoue Inoue @ tpf.co.jp
2002年 5月 23日 (木) 16:34:09 JST


井上です。

Tetsuya Kakura wrote:
> 
> こんにちは。
> 加倉です。
> 
> PostgreSQL 7.2.1 用の ODBC ドライバの SQLColAttribute で以下の様
> な現象が起きていま
> す。これは不具合のような気がしますがどうでしょう?
> ■現象
> - VARCHAR(40) の列の OCTET LENGTH に 0 が返される。
> - OCTET_LENGTH の取得は SQLColAttribute で SQL_DESC_OCTET_LENGTH
> を指定しています。
>  SQLRETURN は SQL_SUCCESS が返されています。
> ※参考までに、Column Size, Display Size は各々 40 と 40 が返されて
> います。


問題がいくつかありそうです。

1)SQL_DESC_OCTET_LENGTHはODBC3.Xで追加された項目ですが、
 普通にコンパイルしてもODBC2.50対応のドライバしか作成
 されません。値の0とSQL_SUCCESSはドライバマネージャー
 が返しているのではないかと思われます。
2) PostgreSQL7.2.xに付属のソースではOCTET_LENGTHに対応
 する実装がありません。

1)についてはODBCVER=0x0300を定義すればODBC3.0対応の
 ドライバが作成されるかもしれません。残念ながら
 unixODBCで試したことはないので保証はできません。
2)については最新の開発中ソースを使用する必要があります。
 ちなみに最新の実装では

> ■加倉の認識
> - PostgreSQL 7.2.1 では VARCHAR は文字単位になっているので
> 、OCTET LENGTH (転送に必
>  要なバッファのバイトサイズ)は、EUC_JP の場合 2(または3)×
> ColumnSize が戻らなけれ

はマルチバイト付のコンパイルの場合、無条件に3XColumnSizeが
返ります。ただし254(正確にはMax Varchar Size)を超えたら
254にしてしまいます。(VAR)CHARが文字単位というのはODBC
ドライバにとっては厄介な変更で仕方なくこうしてあります。

Hiroshi Inoue
	http://w2422.nsk.ne.jp/~inoue/



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