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

时间:2010-04-05 08:29:47

标签: mysql sql unicode collation unicode-normalization

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

例如:

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

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

3 个答案:

答案 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.这不会发生在字符串数据类型中。

相关问题