MySQL5移行時(後)に起こる全角チルダや全角ハイフンの文字化け問題

phpMyAdminで変更する照合順序は2箇所あり

無事にMySQL5へのDB移行を済ませた後、噂にききし文字化け問題に遭遇。

データベースのMySQL4からMySQL5への移行 (前回エントリ)

全く日本語が表示できないレベルの文字化け(これもよくあるらしい)ではなく、一部の文字が化けるだけの、ちょっと見には気付かない、地味な、でも厄介な事象。全角チルダ(波線)「~」や全角ハイフン「-」が半角のクエスチョンマーク「?」になってしまうもの。

時間や場所の推移(経過)を示すつもりの「~」が「?」に変わってはそれこそ???
時間や場所の推移(経過)を示すつもりの「~」が「?」に変わってはそれこそ???

エントリとコメントの全テキストデータから検索する強力なサイト内検索で調べるとこのとおり。僕は「何々から」の意味や、引用の意味で全角チルダや全角ハイフンを割に多用することもあって、文字化けした半角「?」を含む件数、実に437件。

文字化けした半角「?」を含むサイト内検索結果437件
文字化けした半角「?」を含むサイト内検索結果437件

まずMT全般の運用やカスタマイズで有名な以下のサイトにあった以下のページの方法を試みるもうまくゆかず。

小粋空間: Movable Type で「~」が「?」に文字化けする事象や日本語のタグが合算できない不具合を解消する

なお、一度文字化けしてしまったものについては手作業で修正が必要なようです。

いや、そんな・・・。「~」が「?」になっては意味が全然、違ってくるので看過できない大問題を437件、「~」と「-」にも選り分けながら、かつ、正しい「?」もあるのに注意しつつ手作業で修正するのはちょっと・・・。その他、十数件、色々とめぐりにめぐったのだけれど今回の僕のケースでは解消せずも、やっと見つけたのが以下のページ。

さくらインターネットMySQL5化 (nni's blog)

インポートする際、最初の画面の「MySQL 接続の照合順序」を「utf_general_ci」(か「utf_unicode_ci」)にするだけでなく、

最初の画面の照合順序と
最初の画面の照合順序と

「データベース選択」→「操作」タブ画面の下側にある「照合順序」も「utf_general_ci」にしてやる(つまり、2箇所)必要有り。

データベースの操作タブの照合順序も変更が必要
データベースの操作タブの照合順序も変更が必要

これでインポートし直すと解決! 再びのサイト内検索結果は59件に激減してスッキリ!

MySQL5移行後の文字化け解消
MySQL5移行後の文字化け解消

最後の詰めはSQLSetNames

一件落着かに見えたものの、データベースのインポート分は文字化けせずに解決したものの、その後にエントリした文中で再び「~」と「-」が文字化けしてしまう。

こちらもまた別の問題で、これは割とケースが多いようで

Movable TypeをMySQL5で使おうとしたら文字化けして泣きそうになったときのためのメモ - 頭ん中

を参考にして

mt-config.cgi に

SQLSetNames 1

の1行を追加。サイト内検索した半角クエスチョン「?」は全て問題ないことを確認してようやっと解決。

新規エントリ分も文字化けしていないことを確認
新規エントリ分も文字化けしていないことを確認

なぜこういうことが起こるのかという、そもそもの複雑な事情、またWindowsとMacとではまた別の問題があって、波線と似て非なる180度反転させた「波ダッシュ」のあること・・・等々、色々と勉強させられました。はぁ~(←波線、全角チルダ)

このように、元は同じ文字である「~」や「-」が、その文字を「シフトJIS」としてUnicodeに変換するか、「CP932」としてUnicodeに変換するかで、Unicodeに変換後の文字が異なる。

このように、変換結果が変わってしまうため、文字化けの原因となる。 文字化けする文字の「~」から、この問題を「WAVE DASH問題」「FULLWIDTH TILDE問題」「WAVE DASH - FULLWIDTH TILDE問題」とも言う。


CP932とは : JavaA2Z


 

  Related Entries


 comment
  1. にゃー より:

    記事参考になりました。
    ありがとうございます。

  2. より:

    にゃーさん、お役に立てればこちらも嬉しく思います。
    にゃーさんのサイトも今後、参考にさせていただきます。

Message

メールアドレスが公開されることはありません。