Movable Type+MySQLで(本来はSET NAMES cp932と発行すべきなのに)SET NAMES sjisをMySQL Serverへ発行してしまう問題

| | 編集 | コメント(0) |

Movable Type + MySQLの組み合わせで使うとき、MT側ではデフォルトでキャラクタセットを指定しない。
そのため、ついついMySQL Server側で(サーバー全体に適用される)default-character-set=cp932とMySQL Serverの起動オプションまたは設定ファイル(my.cnf)で指定したくなるのだが、実はPublishCharsetとSQLSetNamesを指定することでSET NAMESを発行してくれる。

Movable Type 3.2 マニュアル - 環境設定ファイル (mt-config.cgi)

SQLSetNames

データベースへのアクセスする際のエンコードを明示的に設定するものです。値が"1"の場合、PublishCharsetの設定値をもとに、データベースとの接続時のエンコードを指定します。MySQLやPostgreSQLを利用していて、クライアント側のエンコードを指定する必要がある場合、この値を設定してください。

あなたのデータベース環境に合うようMovable Typeを設定する方法については、「Movable Typeのインストール手順」を参照してください。

PublishCharset

デフォルトでは、ユーザー・プロフィールで「表示する言語」に選んだ言語に対応する、HTTPヘッダーの文字エンコーディングを指します。この設定を上書きしたいときは、PublishCharsetを、使用したい文字エンコーディングに設定します。 ただし変更すると、Movable Typeシステムを使うすべてのユーザーとすべてのブログの設定が変更されるので注意してください。 エンコーディングの一例は Shift_JIS です。

デフォルト値: 「表示する言語」に対応する文字エンコーディング

cp932で日本語データを扱いたい場合は、こんな感じでmt-config.cgiへ追記する。

PublishCharset Shift_JIS

SQLSetNames 1

ところが、このままだと、SET NAMES sjisを発行してしまう。
MySQL ServerではSJISに対応するCharacter SetはCP932なので、このままだと、「カッコカブ」などのいくつかの特殊文字を正しく扱えない。

これを正しくSET NAMES cp932と発行するように修正するには、/lib/MT/ObjectDriver/DBI/mysql.pmファイルの次の箇所をsjisからcp932へ変更する。

my %Charset = (
'utf-8' => 'utf8',
'shift_jis' => 'sjis',
'euc-jp' => 'ujis',

そうすると、めでたくSET NAMES CP932を発行することが、General Query Logで確認できます。

macbook:~ hirohama$ sudo tail -f /Users/hirohama/data/data4/macbook.log | grep "SET NAMES"

175 Query SET NAMES cp932

ちなみに、PublishCharsetの値を、utf-8, shift_jis, euc-jp以外に設定すると、(例えばshift-jis)とか、そのままSET NAMESしちゃいます。


macbook:~ hirohama$ sudo tail -f /Users/hirohama/data/data4/macbook.log | grep "SET NAMES"

173 Query SET NAMES shift-jis

明らかにMTのバグなので、そのままにしないように、要注意です。

Movable Typeタグの関連エントリー

Comments

Amazon

Search

flickr

Recent Activity

  • hirohamaは”I’m at 五反田駅 (五反田駅, 品川区). http://4sq.com/6mbyTr“をtweetしました
  • hirohamaは”I’m at 目黒駅 (目黒駅, 品川区). http://4sq.com/4Ke358“をtweetしました
  • hirohamaは”I’m at 渋谷駅 (渋谷駅, 渋谷区) w/ 35 others. http://4sq.com/5i7TJf“をtweetしました
  • hirohamaは”I’m at JR原宿駅 (東京都渋谷区神宮前1-18, 東京) w/ 4 others. http://4sq.com/9OiP8P“をtweetしました
  • hirohamaは”I’m at 代々木駅 (代々木駅, 渋谷区). http://4sq.com/8ZMPnw“をtweetしました
  • hirohamaは”I’m at 西荻窪駅 (杉並区西荻南3丁目25-1, Tokyo). http://4sq.com/8wBXXp“をtweetしました
  • hirohamaは”今までは、「狭くても希望エリア」で探していたけど、「エリアは少し外れるけど、延べ床の広い物件」にシフトしてきた。色々見てると、(良くも悪くも)目が肥えてくるなあ。。。”をtweetしました
  • hirohamaは”休みの前半は役所関係、中盤でディズニーシー宿泊、後半で物件周り、で疲れたけどリフレッシュできた。”をtweetしました
  • hirohamaは”一週間ぶりのオフィス。立ち上げっぱなしのSkypeにスパムが3通。ブロックして、スパム報告。メールは200通超で、半分ほどは関係無いメールでタイトルだけ見て削除。”をtweetしました
  • hirohamaは”【後悔先に立たず 】 #daijirin“をtweetしました
  • hirohamaは”I’m at 中延駅(浅草線) (中延駅, Shinagawa-ku). http://4sq.com/cxxn4b“をtweetしました
  • hirohamaは”I just unlocked the "Superstar" badge on @foursquare! http://4sq.com/b8fm2Z“をtweetしました
  • hirohamaは”I’m at 渋谷駅 - Shibuya Station (渋谷駅, 渋谷区) w/ 39 others. http://4sq.com/5i7TJf“をtweetしました
  • hirohamaは”I’m at 東急フードショー 東急百貨店東横店 (渋谷区渋谷2-24-1, 東京都). http://4sq.com/8ipprz“をtweetしました
  • hirohamaは”I’m at 梅ヶ丘駅 (梅ヶ丘駅, 世田谷区). http://4sq.com/7rUnqO“をtweetしました
  • hirohamaは”I’m at 経堂駅 (経堂駅, 世田谷区). http://4sq.com/7lF6vp“をtweetしました
  • hirohamaは”I’m at 惠比寿駅. http://4sq.com/d0MINr“をtweetしました
  • hirohamaは”確定申告の相談窓口の番号札もらって、待ち時間中に法務局行って書類提出して、もどって来て確定申告も終了。スッキリ。遅めのランチを池上で済ましたら、一家で野口整体。”をtweetしました
  • hirohamaは”I’m at 池上本門寺 (大田区). http://4sq.com/9i0vzu“をtweetしました
  • hirohamaは”法務局は親切だったけど、また行かないと。 蒲田での用事も済んで、やっと帰路に。”をtweetしました

アーカイブ