MySQLが4バイト以上のUTF-8コードを処理できない場合は、コードポイント\U00010000
ですべてのUnicode文字を除外する必要があります。; UTF-8は、そのしきい値を下回るコードポイントを3バイト以下でエンコードします。
そのために正規表現を使用できます:
>>> import re
>>> highpoints = re.compile(u'[\U00010000-\U0010ffff]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '
または、 .translate()
を使用することもできます。 機能
None
のみを含むマッピングテーブルを使用 値:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '
ただし、変換テーブルを作成すると、多くのメモリが消費され、生成に時間がかかります。正規表現のアプローチの方が効率的であるため、おそらく努力する価値はありません。
これはすべて、UCS-4でコンパイルされたPythonを使用していることを前提としています。 PythonがUCS-2サポートを使用してコンパイルされている場合は、'\U0000ffff'
までのコードポイントのみを使用できます。 正規表現では、そもそもこの問題に遭遇することはありません。
MySQL 5.5.3の時点で、新しく追加された utf8mb4
コーデック
Unicodeの全範囲をサポートしています。