Catalyst アプリ内またはテンプレート内で定義されたデータは正しいエンコーディングを持ち、適切に表示されますが、データベースからはすべての非Latin1
が に変換され?
ます。問題はモデルクラスにあるはずだと思います。
use strict;
use base 'Catalyst::Model::DBIC::Schema';
__PACKAGE__->config(
schema_class => 'vhinnad::Schema::DB',
connect_info => {
dsn => 'dbi:mysql:test',
user => 'user',
password => 'password',
{
AutoCommit => 1,
RaiseError => 1,
mysql_enable_utf8 => 1,
},
'on_connect_do' => [
'SET NAMES utf8',
],
}
);
1;
ここに欠陥は見られませんが、何かが間違っているに違いありません。テスト スクリプトでもスキーマを使用したところ、データは適切にエンコードされ、出力は正しくなりましたが、Catalyst アプリ内では正しくエンコードされませんでした。どこに問題があるのでしょうか?
編集
今後の参考のために、ここに解決策を示します。古いスタイルと新しいスタイルの接続情報を混ぜ合わせました。
オールドスタイルはまるで(dsn, username, passw, hashref_options, hashref_other options)
新しいスタイルは(dsn => dsn, username => username, etc)
ですので、次を使用するのが正しいです:
connect_info => {
dsn => 'dbi:mysql:test',
user => 'user',
password => 'password',
AutoCommit => 1,
RaiseError => 1,
mysql_enable_utf8 => 1,
on_connect_do => [
'SET NAMES utf8',
],
}