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

Tetsuya Kakura kakura @ saki.netwk.ntt-at.co.jp
2002年 5月 24日 (金) 10:25:29 JST


加倉です。

Hiroshi Inoue wrote on Thu, 23 May 2002 18:41:26 +0900

> 最新のソースでは
> #ifdef (ODBCVER >= 0x0300) 以下
>   ODBC3.X用にいくつか追加されています。

最新のソースについてはまとまったリリースができたときに使わせていただき
ます。楽しみに待ってます♪

> > なぜ OCTET_LENGTH が Max Varchar Size を超えたら 254 バイトに丸められて
> > しまうのですか?(不勉強ですみません。)
> > MSDN の以下の URL では、OCTET LENGTH は可変長文字列は最大バイト数を返すと
> > 書かれていますが?
> > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlcolattribute.asp
> > ここでいう最大バイト数とは取得するのに必要な転送バッファの最大サイズを意
> > 味しているのだと思いますがどうでしょう。転送バッファの最大サイズなら、254
> > で丸める意味はないとおもいますが。
> > OCTET_LENGTH で最大バイト数が分からないと、VARCHAR 型のデータは SQLBindCol
> > ではデータを取得しずらくなってしまいます。
> 
> 確かにおっしゃるとおりなのですが、ODBCでは254を境に
> SQL_VARCHARからSQL_LONGVARCHARへと別の扱いになって
> しまいます。そして不幸なことにSQL_LONGVARCHARを
> SQL_VARCHARほどうまく扱えないアプリが多いのです。
> VARCHARだから最大文字数に達するデータがあるかどうか
> もあやしい。3倍になるのは最悪のシナリオに過ぎずす
> べてasciiなら1倍ですんでしまう。7.1からの単純コン
> バージョンなら元々バイト数も足りているはずである。
> そもそも7.1迄はそうだったのだし文字数とバイト数を
> 区別しないユーザーもいるだろう。等々を勘案して現在
> の内容にしています。たいしたものをうまないこういう
> 所で悩まなければならないのにはいつもうんざりする
> のですが。

よく分からないのが、『ODBCでは254を境にSQL_VARCHARからSQL_LONGVARCHARへ
と別の扱いになってしまいます。』の部分なのですが、これは PostgreSQL の
ODBC 固有の仕様ですか?ODBC の一般的な仕様ですか?

ODBC 3.51 の文章中に SQL_VARCHAR は最大長 254 というのは見つけられなか
ったのですが、254 を超えても SQL_LONGVARCHAR にせずに SQL_VARCHAR のま
までよいのではないでしょうか?

それにいままで OCTET_LENGTH は実装されていなかったのですから、バイト数で
返しても互換性については特に問題はないのではないでしょうか?


--
Tetsuya Kakura / kakura @ saki.netwk.ntt-at.co.jp



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