Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Aviso gerado pela inserção de unicode de 4 bytes no mysql


Se o MySQL não puder lidar com códigos UTF-8 de 4 bytes ou mais, você terá que filtrar todos os caracteres unicode no codepoint \U00010000; UTF-8 codifica codepoints abaixo desse limite em 3 bytes ou menos.

Você pode usar uma expressão regular para isso:
>>> 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: '

Como alternativa, você pode usar o .translate() função com uma tabela de mapeamento que contém apenas None valores:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '

No entanto, a criação da tabela de tradução consumirá muita memória e levará algum tempo para ser gerada; provavelmente não vale a pena seu esforço, pois a abordagem de expressão regular é mais eficiente.

Tudo isso pressupõe que você esteja usando um python compilado pelo UCS-4. Se seu python foi compilado com suporte a UCS-2, você só poderá usar codepoints até '\U0000ffff' em expressões regulares e você nunca terá esse problema em primeiro lugar.

Observo que, a partir do MySQL 5.5.3, o recém-adicionado utf8mb4 codec suporta toda a gama Unicode.