Ukazuje se tedy, že toto bylo již několikrát zodpovězeno, jen jsem neměl úplně správný Google-fu, abych našel existující otázky.
- Pythone, převeďte 4bajtový znak, abyste se vyhnuli chybě MySQL "Nesprávná hodnota řetězce:"
- Varování vyvolané vložením 4bajtový kód Unicode na mysql
Díky Martijn Pieters , řešení přišlo ze světa regulárních výrazů, konkrétně tento kód (na základě jeho odpovědi na první odkaz výše):
import re
try:
# UCS-4
highpoints = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
# UCS-2
highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
# mytext = u'<some string containing 4-byte chars>'
mytext = highpoints.sub(u'\u25FD', mytext)
Znak, kterým nahrazuji, je WHITE MEDIUM SMALL SQUARE (U+25FD)
, FYI, ale může to být cokoliv.
Pro ty, kteří neznají UCS, jako jsem já, je to systém pro konverzi Unicode a dané sestavení Pythonu bude zahrnovat podporu pro variantu UCS-2 nebo UCS-4, z nichž každá má jinou horní hranici podpory znaků.
S přidáním tohoto kódu se zdá, že řetězce v MySQL 5.1 v pohodě přetrvávají.
Doufám, že to pomůže někomu dalšímu ve stejné situaci!