むかっ前回記事「mysql4.0系と4.1系のパスワードの違いについて 」 の続き。


MovableTypeの再構築、文字化け問題について。


恐らく、MovableTypeの管理画面の記事はdbデータを表示、再構築もdbに登録をしているだろうから、mysqlの文字コードの問題だろうと推測。


案の定、mysql4.0系と4.1系の文字列について調べてみたら結構でてきた。


こちらのサイトがよく纏めてありましたので勉強になりました。
MySQL 4.1 日本語環境設定方法 (キャラクタセット設定方法)


mysqlの文字列環境などを調べるコマンドはこちら


さらにmovableTypeも絡めて検索してみた結果、上記のサイトで同じ問題を扱っていました。多少、自分の場合とはずれてるけど・・・
Movable Type + MySQL 4.1 を組み合わせると日本語が文字化けする不具合/障害の解決方法


しかし、書いてある通りに、/etc/my.cnfを設定してみても駄目むかっ


mt-config.cgi の


SQLSetNames 1


のコメントアウトを解除してみたが駄目むかっ


/usr/local/apache2/cgi-bin/mt_3/lib/MT/ObjectDriver/DBI/mysql.pmを編集してみても駄目。


ただ、mysql.pmは上記サイトの説明とは違って文字コードを設定する条件分岐がされてたっぽいけどね。


マイナーバージョンの違いかな。


mysql.pmを一部抜粋。
sub init {
my $driver = shift;
$driver->SUPER::init(@_);
my $cfg = $driver->cfg;
my $dsn = 'dbi:mysql:database=' . $cfg->Database;
$dsn .= ';hostname=' . $cfg->DBHost if $cfg->DBHost;
$dsn .= ';mysql_socket=' . $cfg->DBSocket if $cfg->DBSocket;
$dsn .= ';port=' . $cfg->DBPort if $cfg->DBPort;
$driver->{dbh} = DBI->connect($dsn, $cfg->DBUser, $cfg->DBPassword,
{ RaiseError => 0, PrintError => 0 })
or return $driver->error(MT->translate("Connection error: [_1]",
$DBI::errstr));
if ($cfg->SQLSetNames && (my $c = lc $cfg->PublishCharset)) {
my %Charset = ('utf-8' => 'utf8', 'shift_jis' => 'sjis', 'euc-jp' => 'ujis');
my $c = $Charset{$c} ? $Charset{$c} : $c;
$driver->{dbh}->do("SET NAMES " . $c);
# $driver->{dbh}->do("SET NAMES ujis");

}
# else {
#$driver->{dbh}->do("SET NAMES ujis"); #ujis|sjis|utf8
#}
$driver;
}


perlはあまり詳しくないがロジックはわかる。


このロジックを修正して文字コードを強制的に指定してみたがうまくいかない。


そろそろ・・・パンチ!


もうね…何でこんなところまで見なきゃいかんのかと思い始める。


人が作った解らんシステムの解らんフレームワークのコーディングを修正するには時間がかかる。


自分で作った方がいいんじゃない、かと。


ましてやこれは仕事でも何でもないんだから、どうしてもこうしないといけないなんて理由なんてこれっぽちもないわけで、はい。


もうこだわるのは終了。他で続けよう。


という事でここアメブロに引っ越してきました。


最近のブログメーカではどのようなサービスが提供されてるのかってのも知っておきたいのもありましたから。と最後に一つ理由付け。