2011-02-15 5 views
1

Perl ORM Rose :: DB :: ObjectとMySQLテーブル/カラム照合utf8_general_ciを使用します。データを保存するためのコード:Mojoliciousの中のデータを取得するためのMySQLとPerlで漢字が異常なのはなぜですか?

Motorcycle->new(
    type => $self->param('type'), 
    brand => $self->param('brand'), 
    color => $self->param('color') 
)->save; 

コード(コードが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の 'のcharset =' MIMEパラメータを確認してください。 Apacheの設定、php.ini、アプリケーション、およびphpmyadminにもデフォルト値が設定されていることを確認してください。

mario

+0

私は最も可能性の高い問題であると思われるものに基づいて答えを投稿しました。それがうまくいかない場合は、テキストがどのように「奇妙に見えますか」という具体的な例を示しておけば助けになります。 –

答えて

2

あなたのMySQL接続コードを見ることなく、確かめるのは難しいですが、あなたの接続がUTF-8を使用するとMySQLに伝える必要があります。そうでなければバイトを他の文字セットとして解釈します。 phpMyAdminがあなたに期待される結果を表示しない理由を説明します。

デフォルトのmysqlライブラリを使用しているPHPの場合、これはmysql_set_charsetのためのものです(普通の古いmysql_queryを使用していると仮定します)。 mysqliには、同等のmysqli_set_charsetがあります。

他のライブラリを使用してMySQLにアクセスする場合は、そのドキュメントを参照する必要があります。同じことがperlにも当てはまります。私はその言語について何も知らないので、あなたに何か詳細を教えることはできません。

4

Perlコードでは、データがPerlの内部文字表現であるようにEncode :: decode()入力を行い、データで作業し、次にデータベースに書き込む前にEncode :: encode()する必要があります。 。

$dbh->do('SET NAMES "utf8"'); 

MySQLクライアントライブラリとサーバーが文字セットに同意するようにデータベースに接続した後で、これを行うこともできます。

項目:これらは+表示の問題をコードしているのでhttp://perldoc.perl.org/perlunitut.htmlhttp://perldoc.perl.org/perlunicode.html

+0

ありがとうございます。私はあなたの指示に従って、いくつかのWeb検索を行い、デフォルトの接続を設定し、それは動作します。詳細はこのスレッドへの返信に掲載されています。 – Weiyan

関連する問題