2011-01-25 20 views
1

私は母国語学習のためのアプリケーションを開発しています。私はいくつかの文字を 'ẽũ'として保存する必要があります。私のデータベースは、デフォルトの照合でutf-8の文字セットに設定されており、この文字の影響を受けるテーブルも設定されています。MySQLの文字セットが必要

私は、通常のSQL挿入を使用して行を追加しようとすると問題がある:

INSERT INTO text(spanish,guarani) VALUES('text','ẽũ'); 

これは警告スロー:

Warning Code : 1366 Incorrect string value: '\xE1\xBA\xBD\xC5\xA9' for column 'guarani' at row 1 

を、結果は「??」ですそれらの文字があるところ。

質問:これらの文字はUTF-8文字セットの対象外ですか?どちらが必要ですか?

注:ラテン-1

おかげで同じ問題。

+0

あなたの接続はどのような照合ですか?どこからクエリを送信していますか? –

+0

標準HTMLフォームからの送信。接続と通信はPHP経由です。 – gustyaquino

答えて

1

QUICK !!! Read http://www.joelonsoftware.com/articles/Unicode.html

読書が必要です。

あなたは自問しなければならない、ということ読んでたら:

  1. 接続が使用しているどのようなエンコーディング。
  2. 照合にはどのようなロケールを使用しますか。 (該当する場合)。
  3. SQL文はどのようなエンコーディングですか?
  4. 文字列リテラルはどのようなエンコーディングですか?
  5. HTML形式で表示されるエンコードは何ですか?
0

他の回答として、実際にはUnicodeの基本を読み理解する必要があります。 これは難しいことではありません(ある日、あなたはそれを理解することができます)、それはほぼすべてのプログラマー(そして確かにあなたのための)に必要な知識です、一時的ではない知識であり、あなたの人生はより簡単で幸福です。

これらの文字は、 のUTF-8文字セットではカバーされません。

UTF-8はUnicode文字セットであり、Unicodeはすべての文字を(実質的に)カバーします。一方、MYSQLの 'utf8'エンコーディングは真のUTF-8ではなく、いくつかの文字が残っています(BMPの外側にあります)。しかし、それはここであなたの問題ではありません。あなたの2つの文字が有効なUnicodeであることをそこに見

http://www.fileformat.info/info/unicode/char/1ebd/index.htm http://www.fileformat.info/info/unicode/char/169/index.htm

は、BMPの内側にある(それゆえ、MySQLが不自由'utf8'はそれらをサポートするはずです)、yuはUTF-8エンコーディングを見ることさえできます。ご覧のとおり、\xE1\xBA\xBD\xC5\xA9はちょうど良いようです。だから問題は他の場所にあるようです。 DBはutf8ですか?

+0

当初はlatin-1でしたが、テストのためにutf-8に変更されました。その変換は正しく行われませんでしたか?このコードを使用してDEFAULT CHARACTER SET utf8 – gustyaquino

+0

元は*何がlatin-1ですか?どのようにutf-8 *に変更されましたか? "DEFAULT CHARACTER SET"はどこに適用されますか? – Arafangion

+0

@Arafangion私はMySQL用のGUIを使ってデータベースを作成しました:SQLyog。コマンドラインで、次のコマンドを使用して文字セットの変更を適用しました。ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci – gustyaquino

関連する問題