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

Advarsel rejst ved at indsætte 4-byte unicode til mysql

Hvis MySQL ikke kan håndtere UTF-8-koder på 4 bytes eller mere, bliver du nødt til at filtrere alle unicode-tegn fra over kodepunkt \U00010000; UTF-8 koder kodepunkter under denne tærskel i 3 bytes eller mindre.

Du kan bruge et regulært udtryk til 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 bruge .translate() funktion med en kortlægningstabel, der kun indeholder None værdier:

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

Men at oprette oversættelsestabellen vil æde meget hukommelse og tage noget tid at generere; det er sandsynligvis ikke din indsats værd, da tilgangen med regulære udtryk er mere effektiv.

Alt dette forudsætter, at du bruger en UCS-4-kompileret python. Hvis din python blev kompileret med UCS-2-understøttelse, kan du kun bruge kodepunkter op til '\U0000ffff' i regulære udtryk, og du vil aldrig løbe ind i dette problem i første omgang.

Jeg bemærker, at fra og med MySQL 5.5.3 den nyligt tilføjede utf8mb4 codec understøtter hele Unicode-serien.



  1. Kan INSERT [...] ON CONFLICT bruges til krænkelser af fremmednøgler?

  2. Hibernate konfigurationsfil (.cfg.xml) til at kortlægge flere MySQL-tabeller i den samme database?

  3. Indeksering af hver kolonne i en tabel

  4. Sådan escapes <,> og &tegn til html-enheder i Oracle PL/SQL