嗯,为啥用'2'或'2'查找返回相同的记录?
Posted
技术标签:
【中文标题】嗯,为啥用\'2\'或\'2\'查找返回相同的记录?【英文标题】:Hmm, why finding by '2' or '2' return the same record?嗯,为什么用'2'或'2'查找返回相同的记录? 【发布时间】:2011-02-04 08:55:14 【问题描述】:请原谅我的新手问题,但是为什么在 mysql 中通过 '2' 或 '2' 查找返回相同的记录?
例如:
假设我有一个名为'slug'的字符串字段的记录,值为'2'。下面的 SQL 会返回相同的记录。
SELECT * From articles WHERE slug='2'
SELECT * From articles WHERE slug='2'
【问题讨论】:
+1 第二个 2 字符到底是什么? :) @Jørn U+FF12 全宽两位数。 【参考方案1】:这与你的数据库的排序有关:
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)
【讨论】:
【参考方案2】:它们不应该返回相同的行来表示相等,但是如果您使用like
,您可能会得到相同的行。使用like
mysql会使用模糊匹配,所以2和2是一样的(毕竟都是2的形式,不是吗?)
【讨论】:
是的,mysql确实返回了相同的记录,正如答案所述,这与排序规则有关。【参考方案3】:slug 的数据类型是什么?我认为它的数字之一。如果是这样,这里 mysql 确实将其转换为 int,并且任何方式 '2' 或 '2' 都将变为 2。这不会发生在字符串数据类型中。
【讨论】:
以上是关于嗯,为啥用'2'或'2'查找返回相同的记录?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不能用相同的签名声明两个方法,即使它们的返回类型不同? [复制]
为啥相同的 SQL 查询可能在 SQL Developer 和代码中返回不同的结果?