sql >> Databasteknik >  >> RDS >> Mysql

Varning väckts genom att infoga 4-byte unicode i mysql

Om MySQL inte kan hantera UTF-8-koder på 4 byte eller mer måste du filtrera bort alla unicode-tecken över kodpunkten \U00010000; UTF-8 kodar kodpunkter under det tröskelvärdet i 3 byte eller färre.

Du kan använda ett reguljärt uttryck för det:

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

Alternativt kan du använda .translate() funktion med en mappningstabell som bara innehåller None värden:

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

Men att skapa översättningstabellen kommer att ta upp mycket minne och ta lite tid att generera; det är förmodligen inte värt din ansträngning eftersom det vanliga uttryckssättet är mer effektivt.

Allt detta förutsätter att du använder en UCS-4-kompilerad python. Om din python kompilerades med UCS-2-stöd kan du bara använda kodpunkter upp till '\U0000ffff' i reguljära uttryck och du kommer aldrig att stöta på det här problemet i första hand.

Jag noterar att från och med MySQL 5.5.3 den nyligen tillagda utf8mb4 codec stöder hela Unicode-intervallet.



  1. Laravel Group efter datum

  2. Hur man väljer flera rader från mysql med en fråga och använder dem i php

  3. INSTR() Motsvarar i SQL Server

  4. Hur skapar man en skrivskyddad användare i PostgreSQL?