0

djangoを使用して次の文字列をmysqlデータベースに保存しようとしています(他の場所から文字列を取得しました)

m.cr1 = u"\U0001F3C9" # cr1 is models.CharField(max_length=50)
m.save()

エラーが発生します

Warning: Incorrect string value: '\xF0\x9F\x8F\x89' for column 'cr1' at row 1

ここで他の関連する質問を調べ、mysqlをutf8_unicode_ciに変更しましたが、これは役に立ちません。一般に、私のコードはユニコードで問題なく動作しますが、この特定のケースでは動作しません。

これは、これが32ビットのユニコードであるという事実に関連していると思います。

私は実際にこのケースを検出したいだけで、おそらく悪い文字を無視したいと思います。

何か案は?

ありがとう

4

1 に答える 1

2

MySQLutf8は実際のUTF-8ではありませんが、までのコードポイントのみをサポートする変更されたUTF-80xFFFFです。MySQLに含まれていないコードポイント( 0x1F3C9> )を使用しようとしています。0xFFFFutf8

MySQLの比較的新しいバージョンが必要であり、に変更する必要がありutf8ますutf8mb4。どこにでも。

接続はutf8mb4、照合、テーブル/列などである必要があります。utf8MySQLコンテキストのどこにでも間違っているので、そうする必要がありますutf8mb4

于 2013-01-09T11:57:56.283 に答える