2011-02-15 21 views
1

我使用Perl ORM Rose :: DB :: Object和MySQL表/列整理utf8_general_ci。代码保存数据:为什么中文字符在MySQL和Perl中显示不正常?

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); 

没有解码读取时回数据所需。

+0

由于这些编码+显示问题,检查`字符集=您的应用程序和的phpmyadmin的`MIME参数。确保默认值在Apache配置,php.ini,您的应用程序和phpmyadmin中都是固定的。检查

mario 2011-02-15 00:36:07

+0

我已经发布了一个基于我认为是最可能的问题的答案。如果这不起作用,那么如果您提供了文本如何看起来“很奇怪”的具体示例,这将有所帮助。 – 2011-02-15 00:38:01

回答

2

没有看到你的MySQL连接代码,很难确定,但很可能你需要告诉MySQL你的连接将使用UTF-8 - 否则,它会将你的字节解释为其他字符集,会解释为什么phpMyAdmin没有向您显示预期的结果。

对于使用默认mysql库的PHP,这就是mysql_set_charset的用途(假设您使用普通的旧mysql_query);对于mysqli,你有相应的mysqli_set_charset。

如果您使用其他库来访问MySQL,则必须查看其文档以获取类似内容。 perl也是一样;我对这种语言一无所知,所以我不能给你任何具体细节。

相关问题