私はTwitterのAPIからツイートデータを取得し、それをMySQLデータベースに保存するDjangoアプリを持っています。私が知っている限り(私はまだ文字エンコーディングの細かいところで頭を抱えています)、私はUTF-8をどこでも使用していますが、MySQLのエンコーディングや照合はtweetにはEmoji私は4バイトのエンコーディングを使用することを理解します。それらを保存しようとすると、ジャンゴから次の警告を生成します。私の入力から絵文字をフィルタリングすることで、MySQL <5.5で保存できますか?
/home/biggleszx/.virtualenvs/myvirtualenv/lib/python2.6/site-packages/django/db/backends/mysql/base.py:86 :警告:不正な文字列値: '\ XF0 \ x9F \ x98 \ XAD I ...' 列 'text' の行で1 リターンself.cursor.execute(クエリ、引数)
ための私はMySQL 5.1を使用しているので、utf8mb4を使用することは、5.5にアップグレードしない限り、私はむしろまだ読んでいないでしょう(Djangoのサポートは、生産準備が整っていません。もはや正確ではない)。また、影響を受けるカラムでTEXTの代わりにBLOBを使用することをアドバイスしたfolksも見てきました。これは性能を損なう可能性があると判断したためです。
私の質問は、私がツイートの内容を100%保存するのに悩まされていないと仮定すると、Emojiのすべての文字をフィルタリングし、それらを非マルチバイト文字由緒あるWHITE MEDIUM SMALL SQUARE (U+25FD)
?私はこれが私の現在のセットアップで与えられたデータを保存する最も簡単な方法だと考えていますが、別の明白な解決策が見つからない場合、私はそれを聞いてみたいです!
参考までに、私はUbuntu 10.04.4 LTSでPython 2.6.5を使用しています。 sys.maxunicode
は1114111なので、UCS-4ビルドです。
読んでいただきありがとうございます。
UTF8が非エンコードすることができますBMPキャラクタ。 – SLaks
@SLaks:はい、しかし、 'utf8' MySQLキャラクタセットは3バイトしか使わないので、それらを保存することはできません。 –