SQL-PHPmyadmin查询无法区分表情符号

SQL-Query in PHPmyadmin can't differentiate Emojis

我已经用谷歌搜索了,到目前为止什么也没发现,因为大多数问题似乎与字符集有关,这在我的情况下似乎是正确的。

情况:
我想统计名字中有不同表情符号的人,但查询似乎无法区分表情符号。

查询:

SELECT Sum(CASE WHEN u.nick LIKE '%%'
           THEN 1
           ELSE 0
           END) AS 'NF'
    ,Sum(CASE WHEN u.nick LIKE '%%'
           THEN 1
           ELSE 0
           END) AS 'T'
FROM users u

--> 

|NF |T  |               |NF|T |
---------   Should be:  -------
|128|128|               |76|52|

以下查询将生成一个列表,其中包含名字中有 unicode 符号的任何人,而不仅仅是那些带有 -Emoji 的人。这支持了我的论点,即查询不想区分任何 unicode 符号。

SELECT *
FROM users u
WHERE u.nick LIKE '%%'

附加信息:
服务器:通过 UNIX 套接字的本地主机
服务器类型:MariaDB
服务器版本:10.1.48-MariaDB-0ubuntu0.18.04.1 - Ubuntu 18.04
Protokoll 版本:10
服务器-Zeichensatz:UTF-8 Unicode (utf8mb4)
数据库客户端版本:libmysql - mysqlnd 7.4.22
PHP-Erweiterung: mysqli 文档 curl 文档 mbstring 文档
PHP-版本:7.4.22
Table“用户”排序:utf8mb4_unicode_ci
行昵称类型:varchar(255)
行昵称排序:utf8mb4_general_ci

有人知道问题出在哪里吗?

这可能是因为 the Sushi-Beer problem 对所有表情符号一视同仁。如果想唯一标识每个字符,可以使用utf8mb4_bin排序规则:

MariaDB [(none)]> SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SELECT '' = '';
+-----------+
| '?' = '?' |
+-----------+
|         1 |
+-----------+
1 row in set (0.000 sec)

MariaDB [(none)]> SET NAMES utf8mb4 COLLATE utf8mb4_bin;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SELECT '' = '';
+-----------+
| '?' = '?' |
+-----------+
|         0 |
+-----------+
1 row in set (0.000 sec)