こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL Serverからのvarchar型のデータ取得データ長

PearのDBを使いSQLサーバーから「varchar(8000)」で宣言したフィールドからデータを取得すると255バイトで切られます(実際にはもっと長いデータが入っている)。”$db->tableinfo(テーブル)”でテーブルの情報をみると問題のフィールドの長さが「[len]=>255」となっています。
何とかサーバー上の型通りの長さのデータを取り出すことはできないでしょうか?

環境は以下の通りです。
●サーバー
OS: WindowsXP
SQL Server Ver.: SQL Server 2000の8.0 Developer Edition

●クライアント1
OS: FedoraCore4
PHP Ver.: 5.0.4
FreeTDS Ver.: 0.63

●クライアント2
OS: WindowsXP
PHP Ver.: 5.0.5
※クライアント1、2のDBはそれぞれバンドルされているPearを実行インストールしました。

サーバー⇔クライアント1
サーバー⇔クライアント2
共に長さ255で切られる。

AccessでODBC経由で取得した場合はデータ長255以上で取得できました。

何卒宜しくお願い致します。

投稿日時 - 2005-09-22 12:42:46

QNo.1665701

すぐに回答ほしいです

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

> FreeTDS Ver.: 0.63

とありますが、
http://jp2.php.net/manual/ja/ref.mssql.php
のadd a note add a note User Contributed Notesの2番目のvangoethemさんによると、

I had problems related to VARCHAR limitation to 255 characters (INSERT/UPDATE works, SELECT was truncated) using freetds driver (Linux platform).

By upgrading the TDS protocol to 8.0 (see freetds config file), I fixed the problem.

とあるので、TDSのバージョンを確認されてみては如何でしょうか?
# SQL Server の8.0以降からプロトコルが変わってるのでしょうかね。

投稿日時 - 2005-09-22 23:19:03

お礼

回答ありがとうございます。できました!!!

freetdsのコンパイル時にtdsプロトコルVer8.0のオプションを付けていたのですがfreetds.confの[global]オプションではバージョン指定が4.2になっておりそこを8.0(7.0でもOK)に修正してPHPを実行したところ255を超える文字列が取得できました。

クライアント2ではDBのDSNを"mssql://…"から"odbc(mssql)://…"のODBC経由で接続したところ255を超える文字列を取得できたのでクライアント1でもODBC接続で逃げようかと模索しておりましたがLinuxのODBC接続について調べてみると結構ややこしく途方に暮れておりました。

satohさんのアドバイスのおかげで当初の予定で開発を進めることができます。ありがとうございました。

投稿日時 - 2005-09-23 00:47:06

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問