痛苦了两天,终于在catalyst里边可以正确处理汉字了。
最后起到关键作用的还是一个catalyst的plugin:Catalyst::Plugin::Unicode
加载了这个之后,就基本上提交汉字也正常了。
主要注意的配置如下红色:
Mysql里边的表用utf8编码:
CREATE TABLE `change_event` (
`event_id` int(11) NOT NULL auto_increment,
`event_time` date default NULL,
`app` varchar(20) default NULL,
`cat` varchar(20) default NULL,
`event_type` varchar(20) default NULL,
`title` varchar(300) default NULL,
`content` text,
PRIMARY KEY (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CBS.pm主模块加载unicode plugin:
use Catalyst qw/
-Debug
ConfigLoader
Static::Simple
StackTrace
Session
Session::Store::FastMmap
Session::State::Cookie
Unicode
/;
DBIx::Class配置一个utf8编码的表
greatdba:/home/robin/CBS/lib/CBSDB # more Change_event.pm
package CBSDB::Change_event;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ UTF8Columns PK::Auto Core /);
__PACKAGE__->table('change_event');
__PACKAGE__->add_columns(qw/ event_id event_time app cat event_type title content /);
__PACKAGE__->utf8_columns(qw/ event_id event_time app cat event_type title content /);
__PACKAGE__->set_primary_key( qw/ event_id /);
1;
DBIx::Schema的重要配置:
greatdba:/home/robin/CBS/lib/CBS/Model # more CBSDB.pm
package CBS::Model::CBSDB;
use strict;
use base 'Catalyst::Model::DBIC::Schema';
__PACKAGE__->config(
schema_class => 'CBSDB',
connect_info => [
'dbi:mysql:database=dbStatus:host=172.23.16.100',
'dbstatus',
'******',
{
'on_connect_do' => ["SET NAMES 'latin1'"]
},
],
);