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