mysql版本:5.7.21。
我有一张table叫 my_database.my_table
有一个字段叫做 my_code
是那种类型的 VARCHAR(25)
.
我的表中有以下条目:
my_code
'1234'
'1234-1'
'1234-2'
当我跑的时候 SELECT my_code FROM my_database.my_table WHERE my_code = 1234;
它将返回所有3条记录,而不是只返回带有 my_code
的 '1234'
.
我相信这是因为 '1234-1'
以及 '1234-2'
被投给 1234
因此通过了我的where条件。
我知道有一些方法可以解决这个问题,比如 CONCAT(1234, '')
,但我想知道是否有一种方法可以阻止这种情况的发生。
编辑:
澄清各地缺乏单引号 1234
在我的示例中,查询是有意的。这是一个关于如何在不修改查询中的值的情况下防止mysql的默认强制转换行为的问题。
1条答案
按热度按时间oxcyiej71#
当运算符与不同类型的操作数一起使用时,会进行类型转换以使操作数兼容。有些转换是隐式进行的。例如,mysql会根据需要自动将数字转换为字符串,反之亦然。
https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html