sql >> Database >  >> RDS >> Mysql

Waarschuwing opgewekt door 4-byte unicode in mysql . in te voegen

Als MySQL geen UTF-8-codes van 4 bytes of meer aankan, moet u alle Unicode-tekens boven codepunt \U00010000 uitfilteren; UTF-8 codeert codepunten onder die drempel in 3 bytes of minder.

Je zou daarvoor een reguliere expressie kunnen gebruiken:

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

Als alternatief kunt u de .translate() gebruiken functie met een toewijzingstabel die alleen None . bevat waarden:

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

Het maken van de vertaaltabel zal echter veel geheugen in beslag nemen en enige tijd in beslag nemen om te genereren; het is waarschijnlijk niet de moeite waard omdat de reguliere expressiebenadering efficiënter is.

Dit alles veronderstelt dat je een UCS-4 gecompileerde python gebruikt. Als uw python is gecompileerd met UCS-2-ondersteuning, kunt u alleen codepunten gebruiken tot '\U0000ffff' in reguliere expressies en je zult dit probleem nooit tegenkomen.

Ik merk op dat vanaf MySQL 5.5.3 de nieuw toegevoegde utf8mb4 codec ondersteunt het volledige Unicode-bereik.



  1. SQL-wijzigingstabel

  2. Hoe Random() werkt in PostgreSQL

  3. Wat is de betekenis van het vraagteken in MySQL bij WHERE column =??

  4. Database - Een evenemententabel ontwerpen