Mysql
 sql >> база данни >  >> RDS >> Mysql

Предупреждение, повдигнато чрез вмъкване на 4-байтов уникод в mysql

Ако MySQL не може да обработва UTF-8 кодове от 4 байта или повече, тогава ще трябва да филтрирате всички уникод знаци през кодова точка \U00010000; UTF-8 кодира кодови точки под този праг в 3 байта или по-малко.

Можете да използвате регулярен израз за това:

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

Като алтернатива можете да използвате .translate() функция с таблица за съпоставяне, която съдържа само None стойности:

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

Въпреки това, създаването на таблицата за превод ще изяде много памет и ще отнеме известно време за генериране; вероятно не си струва усилията ви, тъй като подходът на регулярните изрази е по-ефективен.

Всичко това предполага, че използвате UCS-4 компилиран питон. Ако вашият python е компилиран с поддръжка на UCS-2, тогава можете да използвате само кодови точки до '\U0000ffff' в регулярни изрази и никога няма да срещнете този проблем на първо място.

Отбелязвам, че от MySQL 5.5.3 новодобавеният utf8mb4 кодек поддържа пълния диапазон на 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. Как да накарам заявка да не връща нищо, когато няма условия?

  2. Грешка в MySQL Твърде много връзки

  3. MySql:ако съществува стойност UPDATE else INSERT

  4. Извличане на ред с данни от таблица с двойки ключ-стойност в MySQL

  5. Защо моят cfloop спира след вмъкване на първи идентификатор?