PHPでデータを引っ張る際、お決まりの
trim(mb_convert_encoding($data->COLUMN,'UTF-8','SJIS-win'))
をしているのだが、今回引っ張った文字がなぜか文字化けしていた。
なんだろなと思って見ていたら、2バイト文字が文字化けしているようだ。
普通は上記の呪文を使えばちゃんと変換されるはずなのだが、なんだろなと思って調べてみる。
でも何度調べても原因がわからない。別のカラムの文字はちゃんと表示しているのに、このカラムだけ文字化け。謎だ・・。
で調べること10分ほど。テーブルを作るときこのカラムだけDBCS(日本語専用フィールド)にしていなかったのが原因みたい。
いわゆるオープンフィールドと言われる、テーブルを作るときにカラムに指定するOの文字。
これを付けていなかったから2バイトで1文字で扱われなかったみたい。
これ、テーブルを作り直せばいいのだろうけど、作り直すのって面倒だなと思って調べていたら、いいのがあった。
SQLのときにCASTという呪文使えば直ったので備忘録として載せておきます。
CAST(COLUMN AS VARCHAR(20) CCSID 5026) AS COLUMN
これでうまくいった。めでたしめでたし。
コメント