【发布时间】:2011-06-27 07:09:44
【问题描述】:
我使用 Perl ORM Rose::DB::Object 和 MySQL 表/列排序规则utf8_general_ci。数据保存代码:
Motorcycle->new(
type => $self->param('type'),
brand => $self->param('brand'),
color => $self->param('color')
)->save;
Mojolicious中检索数据的代码(代码相当于utf8::decode):
<td><%= Mojo::ByteStream->new($cycle->type)->decode('utf-8') %></td>
<td><%= Mojo::ByteStream->new($cycle->brand)->decode('utf-8') %></td>
<td><%= Mojo::ByteStream->new($cycle->color)->decode('utf-8') %></td>
中文字符在我的应用程序中看起来很好,但在 phpMyAdmin 中它们看起来很奇怪。如果我将字符保存在 phpMyAdmin 中,它们在 phpMyAdmin 中会很好,但在我的应用程序中看起来很奇怪。
我已经在 SQLite 和 Firefox SQLite 插件中对其进行了测试,字符在 Firefox SQLite 插件和我的应用程序中看起来都很好。
我认为这是服务器问题。如果我将 Perl 与 PHP 融合在一起,那将是一场灾难。
感谢您的帮助。
解决如下:
__PACKAGE__->use_private_registry;
__PACKAGE__->default_connect_options( mysql_enable_utf8 => 1 );
__PACKAGE__->register_db(
driver => 'mysql',
database => 'test',
host => 'localhost',
username => 'root',
password => '',
添加这一行很重要:
__PACKAGE__->default_connect_options( mysql_enable_utf8 => 1 );
读回数据时无需解码。
【问题讨论】:
-
由于这些是编码+显示问题,请检查您的应用程序和 phpmyadmin 的
charset=mime 参数。确保在 Apache 配置、php.ini、您的应用程序和 phpmyadmin 中巩固默认值。还要检查 -
我根据我认为最有可能出现的问题发布了一个答案。如果这不起作用,如果您提供一个文本看起来“奇怪”的具体示例会有所帮助。