Movable Type+MySQLで(本来はSET NAMES cp932と発行すべきなのに)SET NAMES sjisをMySQL Serverへ発行してしまう問題
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_JISSQLSetNames 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のバグなので、そのままにしないように、要注意です。
Related Entries
- このブログにTypePad Connect 入れてみた
- ブログのデザインを変更
- Movable Typeでプラグインを使わずに関連記事の表示
- 久しぶりにこのブログをいじった
- どうもコメントできないみたいなので匿名オンリーにしてみた
- Movable TypeのAction Streamsがちょっと楽しい
- WebSig24/7 MT4分科会 第1回イベント「WebSig24/7 2007年秋 MT4の日 」に行ってきた
- iPhone向けインターフェイスiMTを使ってNOKIA E61からポストしてみる
- 検索機能の追加
- CORESERVERでMovable Type 4.0へアップグレードとカスタマイズ
- Movable Typeで検索がとっても遅い場合は
- スタイルシートを簡単にカスタマイズ
- Movable Type 4.0は真っ当に進化しているのでは?
- ホスティング会社内でサーバの引越し
- ブログを読むツール
- Movable Typeの日本での健闘ぶりと、WordPressの海外での普及ぶり
- Movable Type 3.3のバグ - 月別や日別など日付をベースにしたアーカイブテンプレートを再構築すると、出力結果のすべてのページに同じ最新エントリが表示される
- Movable Type 3.3 Beta1を自宅サーバに新規インストールしてテスト運用
- Project Comet改めVOX
- WYSISYGエディタTinyMCE Plugin for Movable Type Beta3の試用
- FeedBurnerでGoogle AdSense挑戦
- Movable Type 3.2 日本語版他
- 無料blogサービス
- Movable Type 3.171-ja
- ブログ用エディタ比較, Blog Editor Comparison -ecto, ubicast Blogger, and BlogWrite-
- Syndicate修正
- MTスタイルシート修正
- MT改良-3
- MT改良-2
- moblog
- Fotolog.net
- MT改良
- Movable Type 3.151日本語版
- Movable Type 3.15へアップデート
- Web Hosting
- Bookmarklet for Linkblog
Comments