15

私のデータベース(MySql)にはutf8_general照合があります。データベースからデータにアクセスし、Webページ(Perlで開発)を表示しています。スウェーデン語の文字(ä、å、ö)が別の文字で表示されています。Mysqlデータベースをチェックインすると、ä、å、ö文字を含むデータが表示されます。データへのアクセス中にエンコーディングの問題があるようです。データベースへの接続中に、次のコードを使用しました

my($dbh) = DBI->connect($config{'dbDriver'},$config{'dbUser'},$config{'dbPass'}) or die "Kunde inte ansluta till $config{'dataSource'}: " . $DBI::errstr;
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('set names utf8');
4

4 に答える 4

9

出力で各 ä/å/ö が 2 バイトで表されている場合は、文字を二重にエンコードしている可能性もあります。(質問がすでにあなたがやっていると示している$dbh->{'mysql_enable_utf8'} = 1;ので、これが最も可能性の高いケースだと思います。)これをWebページに表示していることを考えると、ページが文字セットがUTFであることを指定していない可能性があります- 8 で<head>あり、ブラウザが使用する文字エンコーディングを誤って推測している可能性があります。

Web アプリケーション フレームワーク、テンプレート システムなどを詳しく調べて、値がデータベースから取得されてからユーザーのブラウザに到達するまでの間に、値が 1 回だけエンコードされていることを確認してください。多くのフレームワーク/テンプレート エンジン (私が普段使用している Dancer と TT の組み合わせなど) は、正しく構成すると出力エンコーディングを自動的に処理します。つまり、出力前に明示的にエンコードすると、データは二重にエンコードされます。

于 2012-10-31T11:33:06.497 に答える
9

接続時に設定する必要がありmysql_enable_utf8ます:

 my($dbh) = DBI->connect(
     'dbi:mysql:test',
     'user',
     'password',
     {
         mysql_enable_utf8 => 1,
     }      
);
于 2012-10-31T10:47:02.910 に答える
0

接続でCharsetをutf8に設定する必要があります!

charset = utf8
于 2012-10-31T10:30:02.087 に答える
0

完全な仕様は次のとおりです。

http://search.cpan.org/~capttofu/DBD-mysql-4.038/lib/DBD/mysql.pm#mysql_enable_utf8

さらに、このフラグをオンにすると、受信データを UTF-8 として扱う必要があることが MySQL に通知されます。これは、connect() の呼び出しの一部として使用された場合にのみ有効になります。接続後にフラグをオンにした場合、同じ効果を得るにはコマンド SET NAMES utf8 を発行する必要があります。

于 2016-11-10T13:42:30.817 に答える