0

特殊文字でいくつかの問題が発生しています。たとえば「ö」という文字を使用してサイトに登録しようとすると、次のエラー メッセージが表示されます。

1366 - Incorrect string value: '\xF6m' for column 'username' at row 1

insert into phpbb3_users (username, username_clean, user_password) values ('Ström', 'Ström', '$H$9iK6K37VoHM//')

文字設定が問題である可能性があることを理解しています。データベースを確認すると、いくつかのテーブルに照合があることがわかります。

latin1_swedish_ci 

一部のテーブルには照合があります (たとえば、上記の例で問題が発生しているテーブル 'phpbb3_users'):

utf8_bin

そして、MySql の設定を確認すると、これらの設定が混在していることがわかります。

| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci 
  1. どの character_set を使用することをお勧めしますか? character_set を utf8mb4 に変更すると問題が解決することを知りましたが、MySql バージョン (5.1.4) はそれをサポートしていますか?
  2. character_set を変更する必要がありましたか? /etc/my.cnf およびすべてのテーブル照合のすべてのインスタンスで?

ありがとう。

4

1 に答える 1

2

必要がある:

  1. の文字セット(またはテーブル/データベース/サーバーの次に高いデフォルトの文字セット) を、保存する文字をサポートする文字セットに設定します。「ö」を保存したい場合は、latin1そうします。より多くの「エキゾチックな」文字を保存したい場合utf8は、事実上すべてをサポートするため、優れた選択です.*照合のようなものはほとんど無関係である
    ことに注意してください. 照合は選択した文字セットに従いますが、ここでは文字セットが何よりも重要なインポート変数です。latin1_swedish_ci
  2. 接続文字セットを、テキストを送信する文字セットに設定します。UTF-8 でエンコードされたテキストをデータベースに送信する場合は、接続文字セットをutf8. これは、問題が発生している可能性が最も高い場所です。設定方法は、データベースへの接続方法によって異なります。mysql_set_charsetcharsetDSN 接続文字列のパラメーターまたはSET NAMES utf8クエリで実行できます。
  3. ステップ 2 で宣言したエンコーディングでエンコードされたテキストを送信します。

* MySQLutf8は「本物の」UTF-8 ではなく、すべての Unicode のサブセットのみをサポートします。utf8mb4すべてをサポートする「本物の」UTF-8です。utf8mb4MySQL 5.1 では使用できません。5.5+ のみです。

詳細については、UTF-8 をずっと、Web アプリでの Unicode の前面から背面への処理、テキストを操作するためのエンコーディングと文字セットについて、すべてのプログラマーが絶対に、積極的に知る必要があることを参照してください。

于 2013-10-15T10:21:59.787 に答える