Jika MySQL tidak dapat menangani kode UTF-8 sebesar 4 byte atau lebih maka Anda harus memfilter semua karakter unicode melalui codepoint \U00010000
; UTF-8 mengkodekan titik kode di bawah ambang batas tersebut dalam 3 byte atau kurang.
Anda dapat menggunakan ekspresi reguler untuk itu:
>>> 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: '
Atau, Anda dapat menggunakan .translate()
fungsi
dengan tabel pemetaan yang hanya berisi None
nilai:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '
Namun, membuat tabel terjemahan akan memakan banyak memori dan membutuhkan waktu untuk membuatnya; mungkin tidak sepadan dengan usaha Anda karena pendekatan ekspresi reguler lebih efisien.
Ini semua menganggap Anda menggunakan python yang dikompilasi UCS-4. Jika python Anda dikompilasi dengan dukungan UCS-2 maka Anda hanya dapat menggunakan codepoint hingga '\U0000ffff'
dalam ekspresi reguler dan Anda tidak akan pernah mengalami masalah ini sejak awal.
Saya perhatikan bahwa pada MySQL 5.5.3 yang baru ditambahkan utf8mb4
kodek
tidak mendukung rentang Unicode penuh.