我将如何搜索包含表情符号的文本?

Ste*_*fan 8 regex mysql sql search emoji

我们有一个 MySQL InnoDB 表,带有一个文本字段COLLATE utf8mb4_unicode_ci。我需要搜索包含任何表情符号字符的行。我已经搜索了很多 SO 问题,但人们似乎有他们正在搜索的表情符号列表。我实际上正在寻找一种可以找到任何表情符号的解决方案。 这里 一些没有帮助的帖子。

这个似乎最接近实际为我提供我正在寻找的东西,但 OP 实际上并没有发布他的搜索代码。

谢谢!

sev*_*ven 6

我遇到过数据库从一台服务器迁移到另一台服务器导致表情符号消失的情况。所以我必须找到原始表中包含高 utf8(表情符号)字符的所有行。

此查询按预期工作:

SELECT field FROM `table` WHERE HEX(field) RLIKE "^(..)*F.";
Run Code Online (Sandbox Code Playgroud)

在做任何事情之前,请检查您是否在数据库、表和连接上使用 utf8mb4:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)


dan*_*era -1

在我看来,简单的方法是创建一个包含所有表情符号代码的表,然后通过条件连接like到您的表。

我这里分享一下如何在mysql上插入表情

create table emojis (
  e varchar(100) COLLATE utf8mb4_unicode_ci
 );

 insert into emojis values
 ( _utf8mb4 0xF09F9881 COLLATE utf8mb4_unicode_ci),
 ( _utf8mb4 '' );
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

最终查询应如下所示:

select distinct yt.id
from your_table yt
inner join emojis e 
  on yt.some_column like '%' + e.e + '%'
Run Code Online (Sandbox Code Playgroud)