AS400/IBMi DBCSでないフィールドの文字化け

IT関連

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

 

これでうまくいった。めでたしめでたし。

コメント

タイトルとURLをコピーしました