7

Web サイトが英語 (日本語など) ではない可能性のあるユーザーが送信したコンテンツを受け入れてデータベースに保存するには、すべての新しいコンテンツを utf8_encode し、ユーザーが後でそれを取得するときに utf8_decode するのが最善の方法ですか?

詳細情報: doctrine を使用していますが、MySQL データベースに Unicode 文字を保存または選択しようとするとエラーが発生します:

SQLSTATE [HY000]: 一般エラー: 1267 操作 '=' の照合 (latin1_swedish_ci,IMPLICIT) と (utf8_general_ci,COERCIBLE) の不正な組み合わせ

4

2 に答える 2

8

エンコード機能を使用する必要はありません。あなたがする必要があるのは、あなたがUTF8エンドツーエンドであることを確認することです. データベースが latin1 エンコーディングと照合を使用しているようです。データベースへの接続も UTF8 である必要があります。場合によっては、接続を確立した直後に SET NAMES UTF8 クエリを実行するだけです。

mysql でこのコマンドを実行すると、上記のエラーが解決される可能性がありますが、それでもエンド ツー エンドの UTF8 である必要があります。その後、データに対して特別なことをする必要はありません。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
于 2011-09-10T16:56:08.363 に答える
5

ブレントは正しい。エンドツーエンドである必要があります。これが私のリストです:

Apache config:
    AddDefaultCharset UTF-8
    AddCharset UTF-8  .utf8

php.ini:
    default_charset = "utf-8"

MySQL:
    ALTER DATABASE DEFAULT CHARACTER SET utf8;
    ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8;

PHP/HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    …
    <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"…

This last one seems the most important. Call this function immediately after the mysql_connect() call:
    mysql_query("SET NAMES 'utf8'");
于 2011-09-10T19:59:21.593 に答える