Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ostrzeżenie wywołane przez wstawienie 4-bajtowego kodu Unicode do mysql

Jeśli MySQL nie obsługuje kodów UTF-8 o długości 4 bajtów lub więcej, będziesz musiał odfiltrować wszystkie znaki Unicode w punkcie kodowym \U00010000; UTF-8 koduje punkty kodowe poniżej tego progu w 3 bajtach lub mniej.

Możesz użyć do tego wyrażenia regularnego:

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

Alternatywnie możesz użyć .translate() funkcja z tabelą mapowania, która zawiera tylko None wartości:

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

Jednak utworzenie tablicy translacji zużyje dużo pamięci i zajmie trochę czasu; prawdopodobnie nie jest to warte twojego wysiłku, ponieważ podejście oparte na wyrażeniach regularnych jest bardziej wydajne.

To wszystko zakłada, że ​​używasz skompilowanego Pythona UCS-4. Jeśli twój python został skompilowany z obsługą UCS-2, możesz używać tylko punktów kodowych do '\U0000ffff' w wyrażeniach regularnych i nigdy nie napotkasz tego problemu.

Zauważam, że od MySQL 5.5.3 nowo dodany utf8mb4 kodek obsługuje pełny zakres Unicode.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DOŁĄCZ do trzech stołów

  2. Dla porównania należy wziąć pod uwagę końcowe białe znaki w varchar

  3. MySQL JOIN z warunkami IF

  4. Jak ograniczyć wiele liczb, filtrując wiele kolumn w MySql?

  5. Zliczanie ilości wykonanych zapytań