質問: mysql(utf-8)で ~ が文字化けしてしまう いろいろと検索などして探してみたのですが、情報が得られず困っております。お分かりの方おられましたらご教示いただけると幸いです。 環境 apache 2059 php 5.1.6 mysql 5.0.24a windowsxp sp2 phpソース すべてutf8書いてます。 html出力もヘッダーでutf-8で表示しています。 my.cnfでは すべて default-character-set=utf8 で統一しています。 さらに、phpからmysqlに接続したときに set names utf8; もしてます。 この環境で、 ~ のみが文字化けしてしまいます。 たとえば、 "あ~あ" とinsertすると selectしてみると "あ?あ" となってしまいます。 ~以外の文字は問題ありません。 またphp上で発行クエリ文を表示させると、まだ~となっているので、mysql側の問題だとは思っているのですが、どう設定すればよいかわからないところです。 mysql query browzerからでも同様になってしまいます。 ご存知の方おられましたら、情報よろしくお願いします。
回答: ~は結構鬼門で、utf8では2つのコードが割り当てられています。 「~(u+ff5e)」と「~(これが上下反転した形状)(u+301c)」です。 sjisからutf8に変換すると後者に割り当てられるようで、utf8を sjisに変換すると?になってしまう、という現象があったと覚えています。 そのときの回避策は出力時にバイナリ置換してu+301cをu+ff5eに しました。