2008-03-05 22:07:23

CatalystアプリケーションのUnicode化2

[Catalyst] [DBIx::Class] [MySQL]

・FillInForm安全対策

cpan[1]> install Catalyst::Plugin::FillInForm::ForceUTF8
ex) http://blog.hide-k.net/archives/2007/03/catalyst_2.php
※Catalyst::Plugin::FillInForm だと Catalyst::Plugin::Unicode の前にロードする必要があり、多分いつかハマるのでNG

・DBIx::Class で mysql 使う時

方法1 - DBD::mysql のオプションを使う
(http://search.cpan.org/~capttofu/DBD-mysql-4.006/lib/DBD/mysql.pm)
$ vim lib/MyApp/Model/MyAppDB.pm

package MyApp::Model::MyAppDB;
use strict;
use base 'Catalyst::Model::DBIC::Schema';
__PACKAGE__->config(
    schema_class => 'MyApp::Schema',
    connect_info => [
        'dbi:mysql:myappdb',
        'user',
        'password',
        {
            mysql_enable_utf8 => 1
        }
    ],
);
1;

方法2 - DBIx::Class::UTF8Columns を使う
(http://search.cpan.org/~jrobinson/DBIx-Class-0.08009/lib/DBIx/Class/UTF8Columns.pm)
$ vim lib/MyApp/Schema/Hoge.pm

package MyApp::Schema::Hoge;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/UTF8Columns Core/);
__PACKAGE__->table("tag");
__PACKAGE__->add_columns(
  "shop",
  { data_type => "INT", default_value => "", is_nullable => 0, size => 11 },
  "id",
  { data_type => "SMALLINT", default_value => "", is_nullable => 0, size => 5 },
  "name",
  { data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 255 },
);
__PACKAGE__->set_primary_key("shop", "id");
__PACKAGE__->utf8_columns(qw/name/);    #static で作った場合、add_columns の後に記述すること
1;

どちらでもフラグ付きで放り込んで、フラグ付きで取り出せる。
もちろんmysqlでも普通に見える。
備考:方法1のほうが便利・・・しかし
This option is experimental and may change in future versions.
ex) http://search.cpan.org/~capttofu/DBD-mysql-4.006/lib/DBD/mysql.pm

さらに参考
http://search.cpan.org/~cfranks/HTML-FormFu-0.02004/lib/HTML/FormFu/Manual/Unicode.pod