1

Linux サーバー上で MySQL データベースを使用する Web サイトに取り組んでいます。

データベースでphpMyAdminを使用すると、

  • MyISAM は、この MySQL サーバーのデフォルトのストレージ エンジンです。
  • latin1_swedish_ci

ただし、すべてのテーブルを InnoDB と utf8_unicode_ci で作成しました。また、すべてのテーブルのテーブル フィールドが utf8_unicode_ci であることも確認しました。

それでも、mysql_fetch_array を実行してストリームにエコーすると、意味不明になります。mysql_set_charset('utf8')テキストが正しく表示されるように明示的に設定する必要がありました。

PHP のバージョンは 5.3.9 です。MySQL のバージョンは 5.1.70-cll - MySQL Community Server (GPL) です。

この問題に遭遇したのはこれが初めてで、これまで文字セットを設定する必要はありませんでした。

php mysql_* によってフェッチされたテキストが意味不明になる原因は何ですか? どのような状況で必要mysql_set_charsetですか?

編集: これは、mysqli、pdo などの代替ライブラリを使用する提案を引き付けるための質問ではありません。MySQL と文字セットの動作に関するこの現在の状況について理解したいだけです。ありがとう。

4

3 に答える 3

2

アプリが壊れたサーバー設定の影響を受けないようにするために、接続が確立されたら常に呼び出すのが賢明です。つまり、テーブルをUTF8で作成し、データをUTF8で送信できますが、接続がUTF8でない場合(つまりmy.ini設定のため)、混乱してしまいます。したがって、クエリを呼び出すmysql_set_charset()か実行するSET NAMES charsetと、安全な場所になります。そして、接続ごとに1回実行されるため、とにかく基本的にコストのかかる操作ではありません

于 2013-08-12T10:14:17.603 に答える