MySQL类型转换错误或预期的行为?

时间:2017-02-13 03:51:32

标签: mysql sql

以下是对MySQL数据库表的SQL查询示例,该表包含32位长度的varchar字符串作为UUID。正如您所看到的,WHERE子句不包含完整的字符串,但MySQL返回结果。

  

SELECT * FROM table WHERE uuid = 9

id  uuid                                name
1   9c8f8632cbbac5b0708a9920f6fac755    John Smith

这是一种预期的行为吗?MySQL会转换字段的类型和搜索条件吗?

2 个答案:

答案 0 :(得分:3)

这是预期的行为。发生的事情是您将字符串与整数进行比较。在这种情况下,字符串将根据前导数字转换为数字。

因为只有第一个字母是数字,所以它会转换为9 - 所以相等就可以了。

答案 1 :(得分:3)

看起来MySQL执行从整数到字符串的隐式转换。

mysql> select 9 = '9asdasd';
+---------------+
| 9 = '9asdasd' |
+---------------+
| 1             |
+---------------+
1 rows in set (0.02 sec)

mysql> select 9 = '79asdasd';
+----------------+
| 9 = '79asdasd' |
+----------------+
| 0              |
+----------------+
1 rows in set (0.01 sec)

显然你需要确保有引号来避免这种情况:

mysql> select '9' = '9asdasd';
+-----------------+
| '9' = '9asdasd' |
+-----------------+
| 0               |
+-----------------+
1 rows in set (0.01 sec)