[Akelos] MySQLでの文字コード対応

2月 12, 2009 · Posted in Akelos, PHP · Comment 

AkelosのSVNリポジトリを見てみたらいくつかバージョンアップがなされていた。
比較的暇だったこともあり今回は1つ1つソースを見てどこが変わったのかなー、と眺めていた。

その中の一つ、AkActiveRecord/AkDbAdapters/AkMysqlDbAdapter.php の変更点を見ていておっとっとと思った。

と言うのが今回の話。

MySQLで日本語を扱うとぶつかってくる文字コードの問題。
とにかくアプリ実行時に ‘SET NAMES(or CHARACTER SET) utf8’ を実行するという方法で、後はどのタイミングで実行するかというところです。Akelosでもいろいろと方法があるわけで、

  • ApplicationController ではじめに実行
  • Akelosのソースいじって、MySQL接続直後に実行

などあります。以下の参考サイトの受け売りであります。

参考:
[Akelos][php]Akelosでmysqlの文字化けをどうにかする
[Akelos] Akelos で set names utf8

はじめは Akelosのソースに手を入れる方法を採用し、
ここ最近はTanaka Blog さんの config/boot.php の最後に SET NAMES utf8 を実行する方法を採用していた。

で、今回のソースを眺めていてである AkActiveRecord/AkDbAdapters/AkMysqlDbAdapter.php の最後の方

function connect($die_on_error=true)
{
    parent::connect($die_on_error);
    if(defined('AK_SET_UTF8_ON_MYSQL_CONNECT') && AK_SET_UTF8_ON_MYSQL_CONNECT){
        if(isset($this->connection->_connectionID)){
            if(function_exists('mysql_set_charset')){
                mysql_set_charset('utf8', $this->connection->_connectionID);
            }else{
                mysql_query('SET CHARACTER SET "utf8"', $this->connection->_connectionID);
            }
        }
    }
}

とある。つまりは、config/config.php で

define('AK_SET_UTF8_ON_MYSQL_CONNECT', true);

としてあげれば、いいようである。
最近はutf8しか使わんから自分はこれでもかまわないけれども、できれば encoding に対応してほしいところである。
こんな感じだろうか。

config/database.yaml への encoding 属性追加

development:
    type: mysql
    database_file:
    port:
    database_name: mj
    user: mj
    password: mj
    options:
    encoding: utf8   ← こんなかんじかしらw

で件のAkActiveRecord/AkDbAdapters/AkMysqlDbAdapter.phpの該当箇所で

function connect($die_on_error=true) 
{
    parent::connect($die_on_error); 
    if(!empty($this->settings['encoding']){ 
        if(isset($this->connection->_connectionID)){ 
            if(function_exists('mysql_set_charset')){ 
                mysql_set_charset($this->settings['encoding'], $this->connection->_connectionID); 
            }else{
                mysql_query('SET CHARACTER SET "'.$this->settings['encoding'].'"', $this->connection->_connectionID); 
            }
        }
    }
}

ちなみに未検証です(汗)。


背信の親子…

2月 10, 2009 · Posted in MJ::Blog, · 8 Comments 

先日とあるクライアントを久しぶりに訪問した。
大分前に納品した管理システムの一部修正のためである。

場所は湯島。職場からは鵠沼海岸−藤沢−東京−御徒町といき、後は徒歩である。

毎回ここに来るときは湯島天神を通過する。
湯島天神は学問の神様として知られる菅原道真を祀っていることもあってか、合格祈願の絵馬がたくさんあった。
自分は絵馬とか書いたことないんだけど、まーがんばってくれたまへ

私も今年は仕事以外で一つ勉強でもしてみるかと思いつつ
お参りをしてきた次第だ。

湯島天神

さて、湯島天神を抜けるとそこは………
鳥つねさんである。

鳥つね

毎回このクライアントを訪問するときは昼一番にアポを入れここで親子丼を食してから行くことにしている。
ランチメニューは「上親子丼 ¥1,500」。値段が高いのが厳しいところだが、たまの外出くらいは贅沢するものです。

年始めのエントリーで今年はカツ丼年間とか明言したわりに実はまだカツ丼を食ってなかったりする。
それなのに、それなのに、親子丼なんか食べるとはけしからんことなのだが
湯島往訪が入ってしまった訳で、これはしようがないこととして心に収める他はない。

鳥つねの親子丼

鶏肉は名古屋コーチンと比内鶏、玉子はどこかのいいやつwを使っている模様
食べるの夢中でなんか書いてあったけど見てこんかったわ。

玉子は半熟とろっとしており、写真では見えないがつゆだく状態となっている。
従ってご飯はつゆと一緒にかき込むように食べるのが吉。
つゆもほどよく味が濃く私好みなのである。

ここのクライアントさまとは今後取引が減ってくる傾向にありそうだから
後何回食べれることだろうか・・・