请原谅我的新手问题,但为什么在Mysql中通过“2”或“2”查找返回相同的记录?
例如:
假设我有一个名为'slug'的字符串字段的记录,值为'2'。以下SQL返回相同的记录。
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
答案 0 :(得分: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)
答案 1 :(得分:0)
他们不应该为同一行返回同一行,但是如果你使用like
,你可能会得到同一行。使用like
mysql将使用模糊匹配,因此2和2将是相同的(所有它们都是2的形式,不是吗?)
答案 2 :(得分:0)
slug的数据类型是什么?我认为它的数字。如果是这样,mysql确实将它转换为int,并且任何方式'2'或'2'将变为2.这不会发生在字符串数据类型中。