5

私は、絵文字を含む可能性があり、最近では最も可能性が高いiPhoneアプリからコメントを保存しようとしています。何をしても、顔文字を MySQL データベースに保存できません... 常に Unicode エラーが発生します。

  • パイソン 2.6.5
  • ジャンゴ 1.2.1
  • MySQL データベース (テーブルと行の文字セットを utf8 に設定)
  • データを VARCHAR(255) フィールドに保存する

私が受け取り続けるエラーは次のとおりです。

Incorrect string value: '\xF0\x9F\x97\xBC \xF0...' for column 'body' at row 1

データベースに渡す文字列は次のとおりです。

test_txt = u"Emoji - \U0001f5fc \U0001f60c \U0001f47b ...".encode('utf-8')

更新:私が使用しているモデルは次のとおりです。

class ItemComment(db.Model):
  item = db.ForeignKey(Item)
  user = db.ForeignKey(Profile)
  body = db.CharField(max_length=255, blank=True, null=True)

  active = db.BooleanField(default=True)
  date_added = db.DateTimeField(auto_now_add=True)

  def __unicode__(self):
    return "%s" % (self.item)

奇妙なことに、Django models.py ではなく、MySQL で作成したフィールドにこれを渡そうとすると、正常に動作します。しかし、Django モデルにフィールドを登録するとすぐに、フィールドが死んでしまいます。おそらくこれらを保存する別の方法はありますか?

どんなアイデアも素晴らしいでしょう。
私はこれ以上立ち往生することができませんでした...

更新 2 : 次の UPDATE ステートメントを使用してターミナルで追跡します (U0001f5fc に注意してください)。

UPDATE 'table' SET 'body' = '', WHERE 'table'.'id' = 1 ; args=(u'\U0001f5fc')

値を渡すためにできる限りハードコアを使用します。

force_unicode(smart_str(value), encoding='utf-8', strings_only=False, errors='ignore')

しかし、エラーはまだスローされます:

_mysql_exceptions.Warning: Incorrect string value: '\xF0\x9F\x97\xBC' for column 'body' at row 1

完全に失われました!!!

乾杯、

4

2 に答える 2

5

MySQL サーバーの文字セット utf8mb4 を変更 (バージョン 5.5.3 以降)

( my.ini)my.cnf

[mysqld]
character_set_server = utf8mb4
collation-server = utf8mb4_unicode_ci

または SQL クエリ

SET NAMES 'utf8mb4';

http://dev.mysql.com/doc/refman/5.5/en/charset-connection.htmlも参照してください。

または文字を削除して実行します。

パイソン

import re
# emoji_text is unicode
no_emoji_text = re.sub('[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]', '', str(emoji_text))

ありがとうございました。

MySQL が不正な文字列値エラーをスローするも参照してください 。

于 2012-09-04T05:10:33.383 に答える