9

请原谅我的新手问题,但是为什么在 Mysql 中通过 '2' 或 '2' 查找返回相同的记录?

例如:

假设我有一个名为“slug”的字符串字段的记录,值为“2”。以下 SQL 返回相同的记录。

SELECT * From articles WHERE slug='2'  
SELECT * From articles WHERE slug='2' 
4

3 回答 3

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';
+-----------+
| '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';
+-----------+
| '2'='2' |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)
于 2010-04-05T08:38:21.710 回答
0

他们不应该返回相同的行来表示相等,但如果你使用like你可能会得到相同的行。使用likemysql会使用模糊匹配,所以2和2是一样的(毕竟它们都是2的形式,不是吗?)

于 2010-04-05T08:35:06.243 回答
0

slug 的数据类型是什么?我认为它的数字之一。如果是这样,这里 mysql 确实将其转换为 int,并且任何方式 '2' 或 '2' 都将变为 2。字符串数据类型不会发生这种情况。

于 2010-04-05T08:35:34.233 回答