sql >> Base de Datos >  >> RDS >> Mysql

Advertencia generada al insertar unicode de 4 bytes en mysql

Si MySQL no puede manejar códigos UTF-8 de 4 bytes o más, tendrá que filtrar todos los caracteres Unicode sobre el punto de código \U00010000; UTF-8 codifica puntos de código por debajo de ese umbral en 3 bytes o menos.

Podrías usar una expresión regular para eso:

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

Alternativamente, puede usar .translate() función con una tabla de mapeo que solo contiene None valores:

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

Sin embargo, la creación de la tabla de traducción consumirá mucha memoria y llevará algo de tiempo generarla; probablemente no valga la pena su esfuerzo ya que el enfoque de expresión regular es más eficiente.

Todo esto supone que está utilizando un python compilado UCS-4. Si su python se compiló con soporte UCS-2, solo puede usar puntos de código hasta '\U0000ffff' en expresiones regulares y nunca se encontrará con este problema en primer lugar.

Observo que a partir de MySQL 5.5.3, el recién agregado utf8mb4 códec admite el rango completo de Unicode.