sql - PHPmyadmin 中的 SQL 查询无法区分表情符号
问题描述
我已经用谷歌搜索了,到目前为止没有发现任何问题,因为这似乎与字符集有关,这在我的情况下似乎是正确的。
情况:
我想计算名字中带有不同表情符号的人,但似乎查询无法区分表情符号。
询问:
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-sign 的任何人,而不仅仅是带有 -Emoji 的人。这支持了我的论点,即查询不想区分任何 unicode 符号。
SELECT *
FROM users u
WHERE u.nick LIKE '%%'
附加信息:
服务器:Localhost via UNIX socket
服务器类型:MariaDB
服务器版本:10.1.48-MariaDB-0ubuntu0.18.04.1 - Ubuntu 18.04
Protokoll-版本:10
服务器-Zeichensatz:UTF-8 Unicode (utf8mb4)
Datenbank-客户端版本:libmysql - mysqlnd 7.4.22
PHP-Erweiterung:mysqli 文档 curl 文档 mbstring 文档
PHP-版本:7.4.22
表“用户”排序:utf8mb4_unicode_ci
行 nick-Typ:varchar(255)
行 nick-Kollation:utf8mb4_general_ci
有人知道问题出在哪里吗?
解决方案
这可能是由Sushi-Beer 问题引起的,该问题将所有表情符号视为平等。如果要唯一标识每个字符,可以使用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)
推荐阅读
- dpdk - 如何安装 DPDK 内核模块?
- sql-server - 仅当字段在更新之前为 false 时 SQL Server 才会触发
- java - 使用 Lombok 将 JSON 数组映射到 POJO
- javascript - 尝试使用下拉列表文本更改时,更改文本区域中的文本后没有更改?
- android - 显示键盘时的 BottomSheetDialogFragment 行为
- javascript - 我可以在我的类构造函数中调用一个与构造函数具有相同参数的函数吗?
- python - Pyinstaller 不在 Dist 文件夹中创建文件
- python - 在Django中通过URL传递数据时获取多值dictketError包含空格
- sharepoint - SharePoint Online 中的底部占位符
- ios - iOS 13 move from view controller to another storyboard with its navigation controller