MySQL-запрос для поиска записей смайликов с вариантами тонов кожи - PullRequest
0 голосов
/ 03 февраля 2019

Я работаю над некоторым SQL, связанным с эмодзи, используя данные из выпуска emojione на github (https://github.com/emojione/emojione/releases/tag/4.0.0).

Смайликам присваивается значение в Unicode - например, "замок" castle = 1f3f0.

Многие эмодзи имеют вариации тона кожи - например, человек, поднимающийся (climbing) = 1f9d7, но также имеют 5 вариаций тона кожи:

  1. ?? - 1f9d7- 1f3fb
  2. ?? - 1f9d7- 1f3fc
  3. ?? - 1f9d7- 1f3fd
  4. ?? - 1f9d7- 1f3fe
  5. ?? - 1f9d7-1f3ff

Изменение тона кожи обозначается частью 1f3fb значения Юникода и может отображаться, как указано выше - после начального идентификатора для этого смайлика, или иногда может быть зажато между двумя сегментамизначения Unicode - например, man-mechanic (?‍?) имеет значение Unicode 1f468-1f527, но тогда значения Unicode тона кожи будут следующими:

  1. ??‍? ManМеханик: светлый оттенок кожи - 1f468- 1f3fb -1f527
  2. ??‍? Man MecХаник: Средне-светлый оттенок кожи - 1f468- 1f3fc -1f527
  3. ??‍? Man Механик: Средне-тон кожи - 1f468- 1f3fd -1f527
  4. ic ManМеханик: Средне-темный тон кожи - 1f468- 1f3fe -1f527
  5. ??‍? Человек Механик: Тон темной кожи - 1f468- 1f3ff -1f527

I 'Я пытаюсь написать какой-нибудь SQL, чтобы идентифицировать тех смайликов, у которых есть изменения тона кожи.

Вот некоторые примеры данных:

select my_data.*
from (select '1f468-1f9b3' unicode_value union all
      select '1f468-1f3fb-1f9b3'         union all
      select '1f468-1f3fc-1f9b3'         union all
      select '1f468-1f3fd-1f9b3'         union all
      select '1f468-1f3fe-1f9b3'         union all
      select '1f468-1f3ff-1f9b3'         union all
      select '1f474'                     union all
      select '1f474-1f3fb'               union all
      select '1f474-1f3fc'               union all
      select '1f474-1f3fd'               union all
      select '1f474-1f3fe'               union all
      select '1f474-1f3ff'               union all
      select '1f98d'                     union all
      select '1f40a'                     union all
      select '1f1fc-1f1f8') my_data;

Учитывая приведенные выше примеры данных, есть ли способ вернутьэто:

  1. 1f468-1f9b3
  2. 1f474

Поскольку это единственные записи с 5 вариантами тонов кожи, которые появляются сразу после первого сегментазначение Юникода?

Может быть невозможно достичь этого без написания функций или чего-то более сложного, или объединения SQL с языком сценариев, таким как PHP, но я хотел бы спросить здесь.

1 Ответ

0 голосов
/ 04 февраля 2019
SELECT UNHEX('F09F91A8E2808DF09F94A7');

F09F91A8 = человек
E2808D = Столяр с нулевой шириной
F09F94A7 = механик

Некоторые ссылки:
http://unicode.scarfboy.com/?s=1f3fd
https://codepoints.net/U+1f3fd
http://www.fileformat.info/info/unicode/char/1f3fd/index.htm

MySQL более дружественен к UTF-8, чем к кодовым точкам Unicode.

...