嗯,为什么找'?' 或'2'返回相同的记录?

Sha*_*ing 9 mysql sql unicode collation unicode-normalization

原谅我的新手问题,但为什么要找'?' 或者Mysql中的'2'返回相同的记录?

例如:

假设我有一个名为'slug'的字符串字段的记录,值为'?'.以下SQL返回相同的记录.

SELECT * From articles WHERE slug='2'  
SELECT * From articles WHERE slug='?' 
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 13

它与数据库的整理有关:

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

mysql> SELECT '?'='2';
+-----------+
| '?'='2' |
+-----------+
|         0 |
+-----------+
1 row in set (0.00 sec)

mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT '?'='2';
+-----------+
| '?'='2' |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)