10

私はMySQL 5.1を使用し、UTF-8でデコードされたtxtファイルから約2.7ミリ行を、それ自体が宣言されているテーブルにロードし、utf8_unicode_ciすべての文字フィールドが...utf8_unicode_ciを使用して宣言されていますLOAD DATA INFILE

データベース自体では、文字はすべて正しいように見え、すべてが見栄えがします。ただし、php を使用してそれらを印刷すると、文字は ??? として表示されますが、HTML ヘッドで utf-8 宣言を使用しています。

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

送信されたフォームからテキストを挿入した別のテーブル (utf-8 を使用) では、文字がデータベースに奇妙に表示されますが、SELECT....

だから、私は疑問に思っていました:何が悪いのですか?文字はデータベースに正しく表示されていますかUTF-8、それとも奇妙に表示されていますSELECTか? または、どこに問題がありますか (ファイルをデータベースにロードするとき、HTML 内、またはその間のどこかに)??

ヒントや提案をありがとうございました!:)

4

2 に答える 2

11

注:MySQLのutf8文字セットには制限があり、BMPで3バイト以下のUnicode文字のみをサポートします。utf8mb4代わりに使用する必要があります。

  • MySQLクエリを実行する前に、接続後にコマンドをMySQLに送信してください。SET NAMES utf8 SET NAMES utf8mb4
  • ページが実際にutf-8としてレンダリングされていることを確認してください(HTTPヘッダーがある場合Content-Type: text/html;charset=iso-8859-1、ブラウザーはどちらが優先されるかについて意見が一致しません)。
  • この記事を読んでください:WebアプリでのUnicodeの前面から背面への処理(ただし、MySQLが関係utf8する場所に置き換えることを忘れないでください)。utf8mb4

phpMyAdminが入力されたデータを正しいUnicodeテキストとして表示する場合、SET NAMES utf8接続後に実行していないことになります。

于 2012-05-15T15:32:34.623 に答える
8

データベースに接続した後、データを受信する前に、そのようなコードを使用してみてください

$db->query('set character_set_client=utf8');
$db->query('set character_set_connection=utf8');
$db->query('set character_set_results=utf8');
$db->query('set character_set_server=utf8');
于 2012-05-02T23:02:22.863 に答える