作者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://www.ptt.cc/bbs/Database/M.1499349910.A.9F3.html
※ 編輯: VdustR (140.116.247.215), 07/07/2017 09:14:23
→ VdustR: 我有找到這篇 怎麼從 2014 到現在都還這樣 QQ 07/14 14:55
→ VdustR: 我目前也是用 collate utf8_general_ci 解決 謝謝你 07/14 15:01
→ retsamsu: 如果你真的很期望有修改,可以發個 issue 看看 07/17 08:56
→ retsamsu: 我有發一個 issue 在 mariadb 07/17 18:58
→ retsamsu: 你也可以追蹤看看結果 07/17 18:59
→ VdustR: 好的!謝謝你!! 07/17 22:43