PDOを使用してMSSQLデータベースに格納されているXMLデータを取得し、SimpleXMLを使用してXMLデータを解析するPHPスクリプトを作成しようとしています。
問題は、XMLデータを取得すると次のエラーメッセージが表示されることです。
SQLSTATE [HY000]:一般エラー:10007 Unicodeのみの照合のUnicodeデータまたはntextデータは、DB-Library(ISQLなど)またはODBCバージョン3.7以前を使用するクライアントに送信できません。[10007](重大度5)
データベースにテキストとして保存されているXMLデータを取得するために型キャストしています。必ずしもこれを実際のXMLとして返す必要はありません。とにかくデータを解析するためにSimpleXMLを使用しているので、文字列として取得することは問題ありません。
ただし、型キャストせずにこのデータをテキストとして取得しようとすると、XMLの文字列は常に短くなります。次に、SimpleXMLは次のようなエラーの長いリストを吐き出します。
タグABC行123のデータの途中で終了
期待される'>'
返されたXMLの文字列の長さは4999で最大になりました。データをXMLに型キャストした場合は、次のようにVARCHARに変換します。
SELECT CONVERT(VARCHAR(MAX), CAST(XML_DATA AS xml))
次に、文字列からさらに数文字を絞り出すことができます。文字列の長さは5085で最大になります。
キャスティングと変換は単なる推測でした。それが証明した唯一のことは、これらの最大の長さがどこから来ているのか、またはそれらが何を意味するのかわからないということです。
XMLデータ全体を取得するにはどうすればよいですか?カットオフの原因は何ですか?PHP / PDO、またはMS SQLデータベース?
助言がありますか?
追加情報: データベースは読み取り専用です。サーバーはPHPバージョン5.2.17を実行しています。次のPDOドライバーがインストールされています:sqlite、sqlsrv、mssql、mysql、odbc; MSSQL DB-lib用のPDOドライバー:MSSQL_70。XMLはAmazonMWSからのものです。