>特定のデータ
まずは、特定データ(文字)を断定すべきだと思います。
すべての文字がわからなくても、数個の文字がダメだとわかれば、
あとは、その文字について、
どの段階で、どのように文字コードが変換されているかを考えれば、解決できると思います。
PHP(UTF-8)- ODBC - MSSQL(MS932)
MSのSJISはMS932なので、そのあたりも注意する必要があろうかと思います。
SJISとMS932では微妙に違います。
1.問題となる文字の特定
2.INSERT時にどうなってるか
3.SELECT時にどうなっているか
と地道に切り分けないと、問題を特定できないかと思います。
特定の文字(コード)が、変換できないときに0x00 or 制御文字 or 0x20(空白)に変換されて格納されてしまえば、SELECTするときに、そのまま取り出すわけですから、変になることもあろうかと思います。
>問題となっているデータは空白のままです
DBがMS932である以上、使えない文字があり、それは空白などに通常は自動変換されるはずだったと思います。
>他のデータ(日本語)は問題なく取得?表示できる
(可能性1)データ型の不一致
対応できそうな型にCASTしてみたり、
CONVAERTしてみることで対応可能になるかもしれません。
下記のような具合にいくつかくっつけて試してみてください。
SELECT * , CAST ( 問題のあるフィールド AS 別のデータ型 ) , CONVERT ( 別のデータ型, 問題のあるフィールド, スタイル ) FROM table_a
CAST および CONVERT については下記などを参照。
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx
文字型のフィールドでデータの中にバイナリのゼロ(0x00)が入ってるものがあるのではないでしょうか。
空白になってしまうデータに対して、convert 関数を使って 16進表示してみてはどうでしょうか。
select convert(varbinary, フィールド) from table_a where 問題があるデータを持つ行を特定する条件
(参考)
CAST および CONVERT (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx
PHP側の日本語対応の設定を行ってみてはいかがでしょうか。
エラーがなくsql側からデータを取得できているのであればPHPの設定がうたがわれます。
こちらが参考になればいいのですが。
http://ortk.main.jp/blog/?p=67