首页 > 解决方案 > MySQL 查询以查找具有肤色变体的表情符号记录

问题描述

我正在研究一些与表情符号相关的 SQL,使用来自 github 上的 emojione 版本(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 等脚本语言结合起来,可能无法实现这一点,但我想在这里问一下。

标签: mysqlunicodeemojiemojioneemoji-tones

解决方案


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 代码点更友好。


推荐阅读