Mysql
 sql >> Database >  >> RDS >> Mysql

Avviso generato inserendo unicode a 4 byte in mysql

Se MySQL non è in grado di gestire codici UTF-8 di 4 byte o più, dovrai filtrare tutti i caratteri Unicode su codepoint \U00010000; UTF-8 codifica i punti di codice al di sotto di tale soglia in 3 byte o meno.

Potresti usare un'espressione regolare per questo:

>>> 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: '

In alternativa, puoi utilizzare .translate() funzione con una tabella di mappatura che contiene solo None valori:

>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '

Tuttavia, la creazione della tabella di traduzione consumerà molta memoria e richiederà del tempo per generarla; probabilmente non vale la pena perché l'approccio delle espressioni regolari è più efficiente.

Tutto ciò presuppone che tu stia utilizzando un Python compilato con UCS-4. Se il tuo python è stato compilato con il supporto UCS-2, puoi utilizzare solo codepoint fino a '\U0000ffff' nelle espressioni regolari e non incontrerai mai questo problema in primo luogo.

Prendo atto che a partire da MySQL 5.5.3 il nuovo utf8mb4 codec supporta l'intera gamma Unicode.