MySQL查询以查找具有肤色变体的表情符号记录

时间:2019-02-03 20:34:59

标签: mysql unicode emoji emojione emoji-tones

我正在使用与表情符号相关的SQL,使用github(https://github.com/emojione/emojione/releases/tag/4.0.0)上表情符号版本的数据。

表情符号具有unicode值-例如“城堡” = 1f3f0。

很多表情符号都有肤色变化-例如-人攀爬()= 1f9d7,但是还有5种肤色变化:

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

肤色变化由unicode值的1f3fb部分表示,并可以如上显示-在该表情符号的初始标识符之后,或者有时可以夹在unicode值的两段之间-例如,man -mechanic(‍)的unicode值为1f468-1f527,但随后的肤色unicode值如下:

  1. ‍机械师:浅肤色-1f468-1f3fb-1f527
  2. ‍机械师:中等光肤色-1f468-1f3fc-1f527
  3. ‍机械师:中等肤色-1f468-1f3fd-1f527
  4. ‍机械师:中深色肤色-1f468-1f3fe-1f527
  5. ‍机械师:深色肤色-1f468-1f3ff-1f527

我正在尝试编写一些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种肤色变化的记录,这些记录在unicode值的第一段之后立即出现?

如果不编写函数或进行一些复杂的操作,或者将SQL与PHP之类的脚本语言结合起来,可能无法实现这一目标,但是我想在这里问一下。

1 个答案:

答案 0 :(得分:0)

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

对于UTF-8,MySQL比对Unicode代码点更友好。