w.k*_*w.k 6 perl utf-8 catalyst dbix-class
在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;
Run Code Online (Sandbox Code Playgroud)
我看到这里没有瑕疵,但有些事情一定是错的.我使用我的架构也测试脚本和数据编码良好,输出正确,但在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',
],
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ier 10
在使用Catalyst :: View :: TT和Catalyst :: Model :: DBIC :: Schema的典型Catalyst设置中,UTF-8需要执行以下操作:
encoding => 'UTF-8'到您的应用配置ENCODING => 'utf-8'到您的TT视图配置<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>到<head>html 的部分以满足不关心Content-Type:text/html; charset=utf-8Catalyst :: Plugin :: Unicode :: Encoding设置的http头的旧IEldap_server_options => { raw => 'dn' }根据Catalyst :: Model :: DBIC :: Schema#connect_info:
还支持旧的arrayref样式,其中包含DBI的hashrefs,然后是DBIx :: Class选项.
但是你已经在使用'new'样式了,所以你不应该嵌套dbi属性:
connect_info => {
dsn => 'dbi:mysql:test',
user => 'user',
password => 'password',
AutoCommit => 1,
RaiseError => 1,
mysql_enable_utf8 => 1,
on_connect_do => [
'SET NAMES utf8',
],
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2085 次 |
| 最近记录: |