1

まったく腑に落ちないことに出くわしました。SQL Server データベースから PHP にデータを返そうとすると、奇妙な現象が発生することに気付きました。PHP で SQL Server Native Client ドライバーを使用する場合、オンラインの記事によると、ストリーム型として NVARCHAR(MAX) が返されるはずです。SQL Server Management Studio で、これらのデータ型で新しいテーブルを作成すると、nvarchar(max) フィールドがストリームとして返されます。

[PK][int]
[nvarchar(255)]
[nvarchar(max)]

これらのデータ型を使用してテーブルを作成すると、ストリームではなく実際の値として nvarchar(max) が返されます。

[PK][int]
[nvarchar(256)]
[nvarchar(max)]

SQL Native Client ドライバーを使用するように言わないと、PHP で nvarchar(max) を正しく使用できないことをどこかで見ましたが、それを使用するようにコード化しています。これは、Windows Server 2003 で SQL Server 2005、PHP 5.3 を使用して実行されています。

あるテーブルで nvarchar(max) の実際の値を取得でき、他のテーブルでは取得できない理由を誰かが説明できますか?

それを回避する方法を知る必要はありません。とにかく、テーブルに NVARCHAR(4000) を使用しています。NARCHAR(256) が NVARCHAR(MAX) を動作させることを許可する理由を知りたいだけです。私がオンラインで見たものによると。

編集:

以下は、私が使用し、保存されたパラメーターを使用してアクセスするために変更する基本的な PHP コードです。

<?php
$user = "usercm";
$pass ="cmuserpassword";

try{$conn = new PDO("odbc:DRIVER={SQL Server Native Client 10.0};SERVER=EXAMPLE;DATABASE=EXAMPLE;",$user,$pass);}
catch(PDOException $e){echo "Connection Failed";}

if($conn)
{
    $uspGetAll = $conn->prepare("{CALL uspGetPowerDetails()}");
    if($uspGetAll->execute())
      {
          $results = $uspGetAll->fetchAll(PDO::FETCH_ASSOC);
          $_SESSION['testExample'] = $results;
}
$conn = null;
?>

他のドライバーについては知りたくありません。nvarchar(MAX) がストリームとして返されるかどうかに関係なく、256 以上として宣言されている別のフィールドが変更される理由を知りたいだけです。

4

1 に答える 1