Acontece que isso foi respondido algumas vezes, eu só não tinha o Google-fu certo para encontrar as perguntas existentes.
- Python, converta char de 4 bytes para evitar o erro do MySQL "Valor de string incorreto:"
- Aviso gerado pela inserção Unicode de 4 bytes para mysql
Obrigado a Martijn Pieters , a solução veio do mundo das expressões regulares, especificamente este código (com base em sua resposta ao primeiro link acima):
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)
O caractere que estou substituindo é o
WHITE MEDIUM SMALL SQUARE (U+25FD)
, FYI, mas pode ser qualquer coisa. Para aqueles que não estão familiarizados com o UCS, como eu, este é um sistema para conversão Unicode e uma determinada compilação do Python incluirá suporte para a variante UCS-2 ou UCS-4, cada uma com um limite superior diferente no suporte a caracteres.
Com a adição deste código, as strings parecem persistir no MySQL 5.1 muito bem.
Espero que ajude mais alguém na mesma situação!