作者VdustR (京)
看板Database
标题[SQL ] MySQL unicode LIKE 比对 % 结果不正确?
时间Thu Jul 6 22:05:08 2017
资料库名称:MySQL
资料库版本:5.7.18
内容/问题描述:
> SELECT '\%b' LIKE '%\%'
这个语法在不同的 collation 结果不相同。
utf8_unicode_ci 结果为 1
utf8_general_ci 结果为 0
第一个 % 是 wildcard, 後面的 \% 视为 % 字元,这样结果应该是 0 才正确吧?
请问为什麽使用 unicode 的时候结果会是 1 呢?
我用 cli 执行的结果如下:
mysql> SET collation_connection = utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '\%b' LIKE '%\%';
+------------------+
| '\%b' LIKE '%\%' |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
mysql> SET collation_connection = utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '\%b' LIKE '%\%';
+------------------+
| '\%b' LIKE '%\%' |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
mysql> SET collation_connection = utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '\%b' LIKE '%\%';
+------------------+
| '\%b' LIKE '%\%' |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
mysql> SET collation_connection = utf8mb4_general_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '\%b' LIKE '%\%';
+------------------+
| '\%b' LIKE '%\%' |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
mysql> SET collation_connection = utf8mb4_unicode_520_ci;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT '\%b' LIKE '%\%';
+------------------+
| '\%b' LIKE '%\%' |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.166.147.230
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1499349910.A.9F3.html
※ 编辑: VdustR (140.116.247.215), 07/07/2017 09:14:23
2F:→ VdustR: 我有找到这篇 怎麽从 2014 到现在都还这样 QQ 07/14 14:55
3F:→ VdustR: 我目前也是用 collate utf8_general_ci 解决 谢谢你 07/14 15:01
4F:→ retsamsu: 如果你真的很期望有修改,可以发个 issue 看看 07/17 08:56
5F:→ retsamsu: 我有发一个 issue 在 mariadb 07/17 18:58
7F:→ retsamsu: 你也可以追踪看看结果 07/17 18:59
8F:→ VdustR: 好的!谢谢你!! 07/17 22:43