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)
我已经用谷歌搜索了,到目前为止什么也没发现,因为大多数问题似乎与字符集有关,这在我的情况下似乎是正确的。
情况:
我想统计名字中有不同表情符号的人,但查询似乎无法区分表情符号。
查询:
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)