1

MySQLの「articles」テーブルがあり、SQLyogを使用して次の挿入を作成しようとしています。

insert into articles (id,title) values (2356606,'Jérôme_Lejeune');

これは正常に機能し、選択クエリを実行するとデータが正常に表示されます。

問題は、perlスクリプトを使用して同じ挿入クエリを実行すると、データベースのéとôの代わりに名前がジャンク文字で表示されることです。スクリプトを使用して名前を適切に保存する方法を知る必要があります。挿入を行うコードの部分は次のようになります。

$sql_insert = "insert into articles (id,title) values (?,?)";
$sth_insert = $dbh->prepare($sql_insert);
$sth_insert->execute($id,$title);

$idと$titleには、挿入する前に印刷で確認した正しい必要なデータがあります。手伝ってください。

4

2 に答える 2

3

ワームの文字エンコード缶を開いたので、この問題を解決して解決を続ける前に、学ぶべきことがたくさんあります。

あなたはおそらく、テキストの文字をビットの文字列としてどのようにエンコードできるかを考えることにすでに慣れているでしょう。たとえば、ASCIIエンコーディングでは、8ビットの文字列01000001(65)を使用してA文字を示します。さまざまな言語がいくつあるか、さまざまな種類の文字がいくつあるかを考え始めると、8ビットエンコーディングではそれほど遠くないことがすぐにわかります。そのため、他の多くの文字エンコーディングが急増しています。最も人気のあるもののいくつかはlatin1(ISO-8859-1)UTF-8です。これらのエンコーディングは両方ともéô文字ですが、それらを表すためにまったく異なるビット文字列を使用します。ファイル(または端末)に書き込んだり、データベースに行を追加したりするとき、PerlとMySQLには、出力ストリームの文字エンコードが何であるかという概念があります。エンコーディングは、データを読み取るときにも使用されます。このエンコーディングが何であるかわからない場合は、データを保存して取得したときに、データの見栄えが良い/見栄えが悪いと言っても意味がありません。

PerlとMySQLは、適切な設定で、これらのエンコーディングとさらにいくつかのエンコーディングの両方を処理できます。どのエンコーディングを使用するかは、アプリケーションのすべての部分が同じエンコーディングを使用していることを確認するほど重要ではありません。ただし、次のようなエンコーディングを選択する必要があります

  1. 必要なすべての文字をエンコードできます(この問題については、とに言及éしますôが、他にもありますか?将来はどうなりますか?)
  2. アプリケーションのすべての部分(フロントエンド、データベース、バックエンド)でサポートされています

正しい方向に進むための推奨読書を次に示します。

MySQLとはあまり話せませんが、Perlでの文字エンコードのサポートは急速に進化しています(これは、それがひどく良くないということではありません)。最新バージョンのPerlは、ASCII以外の文字に対して最高のサポート(最もあいまいな文字セットに対して)と最高の機能(たとえば、正規表現や文字クラス)を備えています。

于 2012-10-31T03:08:14.050 に答える
1

従うべきことがいくつかあります。

まず、プログラムとDBの間を移動するデータがUTF-8としてエンコードされていることをPerlが理解していることを確認する必要があります(データベースとテーブルが適切に設定されていることを期待しています)。このためには、次のように、データベースへの接続時に大声で言う必要があります。

 my($dbh) = DBI->connect(
     'dbi:mysql:test',
     'user',
     'password',
     {
         mysql_enable_utf8 => 1,
     }      
);

次に、出力にデータを送信する必要があり、UTF-8としてデータをdecaodeするように設定する必要があります。このために私はかなり良いモジュールが好きです:

use utf8::all;

ただし、このモジュールはコアに含まれていないため、binmode自分で設定することもできます。

binmode STDIN, ":utf8"; 
binmode STDOUT, ":utf8"; 

また、Webページを扱う場合は、UTF-8としてエンコードされたデータを送信していることをブラウザが認識していることを確認する必要があります。そのためには、HTTPヘッダーにエンコーディングが含まれていることを確認する必要があります。

Content-Type: text/html; charset=utf-8;

HTMLMETAタグも設定します。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

今、あなたはあなたの道をカバーする必要があります。

于 2012-10-31T20:15:57.883 に答える