MySQL REGEXP 在没有 BINARY 模式的情况下区分大小写?

MySQL REGEXP acting with case sensitivity without BINARY mode?

我很困惑。我在数据库中有一个源字符串;一些 HTML:

"body": "<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div dir=\"auto\">Nope no attachment</div><br><div class=\"gmail_quote\"><div dir=\"ltr\" class=\"gmail_attr\">

这是SELECT:

SELECT * FROM table1 WHERE column_details REGEXP '(nope.no).attach';

当我 select 使用 REGEXP of '(nope.no).attach' 时,它无法匹配。当我将 Nope 大写时,它匹配。当我 LCASE(column_details) 并返回小写 nope 时,它​​匹配。这里发生了什么?我的理解是 REGEXP 不区分大小写,据我所知我没有强制执行二进制模式......或者默认情况下它是二进制的?如果是这样,如何使其不区分大小写并禁用二进制模式匹配?

谢谢!

并不是说 REGEXP 是 case-insensitive。这取决于列的排序规则。 REGEXP 可以是 case-sensitive 或不敏感的。

mysql> set @h = '<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div dir=\"auto\">Nope no attachment</div><br><div class=\"gmail_quote\"><div dir=\"ltr\" class=\"gmail_attr\">';
Query OK, 0 rows affected (0.00 sec)

mysql> select @h regexp '(nope.no).attach';
+------------------------------+
| @h regexp '(nope.no).attach' |
+------------------------------+
|                            1 |
+------------------------------+
1 row in set (0.00 sec)

mysql> select @h collate utf8mb4_bin regexp '(nope.no).attach';
+--------------------------------------------------+
| @h collate utf8mb4_bin regexp '(nope.no).attach' |
+--------------------------------------------------+
|                                                0 |
+--------------------------------------------------+

我会检查您专栏的整理:

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1' AND COLUMN_NAME = 'column_details';