PHP・MySQL環境でIncorrect string value

ブログの内容をAPIから取得し、UTF-8環境のPHP・MySQL環境でinsertしようとした所、以下のようなエラーがでてしまった。

Incorrect string value: 'xxxxx...' for column 'カラム名' at row 1

どうやらMySQLがinsertする文字列の文字コードがおかしいからフザケンナとか何とか言いたがっているようだ。

詳しく調べてみた所、どうやらAPIで取得したブログの記事中に絵文字が含まれており、そいつの文字コードがMySQL的にはヤメロヨモーって感じらしい。

そういえばブログって絵文字対応している所多いし、絵文字って外字なんだっけ。
今回の用途的には、絵文字をこちらのDBに取り込んだ所で大した利益も無いので、除去してしまうのが一番手っ取り早いと考え、変な文字は消してしまう事にした。

色々ぐぐると、なんぞ色々な情報がでてきたんだけど、試してみると、うまくいったりいかなかったり・・・
結局、以下のような感じで落ち着いた。

$str  // 外字が含まれているUTF-8の文字列

mb_substitute_character("none");

$str = mb_convert_encoding($str, "CP932", "UTF-8");
$str = mb_convert_encoding($str, "UTF-8", "CP932");

ちなみにmb_internal_encodingはUTF-8で、$strの元ネタはCP932だったヤツ。 

ちょっと心配もあるけど、無事除去されてくれた。

Comments are closed.