sql >> Databáze >  >> RDS >> Mysql

Upozornění vyvolané vložením 4bajtového unicode do mysql

Pokud MySQL nedokáže zpracovat kódy UTF-8 o velikosti 4 bajtů nebo více, budete muset odfiltrovat všechny znaky Unicode přes kódový bod \U00010000; UTF-8 kóduje kódové body pod tímto prahem na 3 bajty nebo méně.

K tomu můžete použít regulární výraz:

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

Případně můžete použít .translate() funkce s mapovací tabulkou, která obsahuje pouze None hodnoty:

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

Vytvoření překladové tabulky však zabere hodně paměti a zabere nějaký čas, než se vytvoří; pravděpodobně to nestojí za vaši námahu, protože přístup regulárních výrazů je efektivnější.

To vše předpokládá, že používáte python zkompilovaný UCS-4. Pokud byl váš python zkompilován s podporou UCS-2, můžete použít pouze kódové body do '\U0000ffff' v regulárních výrazech a nikdy nenarazíte na tento problém.

Podotýkám, že od MySQL 5.5.3 nově přidaný utf8mb4 kodek podporuje celý rozsah Unicode.



  1. Vložení více řádků z formuláře php do databáze

  2. Návrh databáze pro uložení barevného vzoru obrázku v MySQL pro vyhledávání obrázku podle barvy

  3. Chyba syntaxe Mysqli UPDATE SET WHERE

  4. Jak replikovat databázi MySQL na jiný server