MSSQLをODBC経由PHPで扱おうと考えています。
SQL文としてエラーになることもなく、文字化けも起こしていないのに、取り出せないデータがあり、困っています。
SELECT * from table_a
として取得しても、取り出せないデータがあります。
SQLエラーもなく、PHP側でも警告/エラーはありません。
該当のデータは日本語でMSSQLの文字コードはSJISです。
PHP側はUTF-8です。
特にエンコードを行なわなくとも、他のデータ(日本語)は問題なく取得〜表示できるのですが、特定のデータのみうまくいきません。
NULLが返ってくるわけでもなく、データが空白となります。
取得後のデータを$rとして、
mb_convert_encoding($r,"UTF-8","SJIS") としても、逆に文字化けを起こしてしまいます。
*この場合は問題のデータだけでなく、取得したデータ全てが文字化けします。
問題となっているデータは空白のままです。
原因として何が考えられますでしょうか?
よろしくお願いします。
*早期解決した場合はボーナスポイントをお支払いします
>特定のデータ
まずは、特定データ(文字)を断定すべきだと思います。
すべての文字がわからなくても、数個の文字がダメだとわかれば、
あとは、その文字について、
どの段階で、どのように文字コードが変換されているかを考えれば、解決できると思います。
PHP(UTF-8)- ODBC - MSSQL(MS932)
MSのSJISはMS932なので、そのあたりも注意する必要があろうかと思います。
SJISとMS932では微妙に違います。
1.問題となる文字の特定
2.INSERT時にどうなってるか
3.SELECT時にどうなっているか
と地道に切り分けないと、問題を特定できないかと思います。
特定の文字(コード)が、変換できないときに0x00 or 制御文字 or 0x20(空白)に変換されて格納されてしまえば、SELECTするときに、そのまま取り出すわけですから、変になることもあろうかと思います。
>問題となっているデータは空白のままです
DBがMS932である以上、使えない文字があり、それは空白などに通常は自動変換されるはずだったと思います。