Hvis MySQL ikke kan håndtere UTF-8-koder på 4 bytes eller mere, bliver du nødt til at filtrere alle unicode-tegn fra over kodepunkt \U00010000
; UTF-8 koder kodepunkter under denne tærskel i 3 bytes eller mindre.
Du kan bruge et regulært udtryk til det:
>>> 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: '
Alternativt kan du bruge .translate()
funktion
med en kortlægningstabel, der kun indeholder None
værdier:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '
Men at oprette oversættelsestabellen vil æde meget hukommelse og tage noget tid at generere; det er sandsynligvis ikke din indsats værd, da tilgangen med regulære udtryk er mere effektiv.
Alt dette forudsætter, at du bruger en UCS-4-kompileret python. Hvis din python blev kompileret med UCS-2-understøttelse, kan du kun bruge kodepunkter op til '\U0000ffff'
i regulære udtryk, og du vil aldrig løbe ind i dette problem i første omgang.
Jeg bemærker, at fra og med MySQL 5.5.3 den nyligt tilføjede utf8mb4
codec
understøtter hele Unicode-serien.