mysql - 为什么 "10ddd"在我的 SQL 查询中等于 "10"?

标签 mysql

我遇到了一个奇怪的问题..

我得到了一个包含以下字段的表:

id          smallint(5)
client_id   smallint(5)
name        varchar(50)
pass        varbinary(20)

我得到了以下值:

id          = 5
client_id   = 10
name        = 'user'
pass        = '123'

但是,如果我在 client_id 之后添加一些字符,它仍会返回该行???

这个查询不应该返回任何东西...嗯

SELECT id
FROM db.user
WHERE client_id='10ddd' && name='user' && pass='123'

最佳答案

那是因为 mySQL 自动转换用于 int 列的字符串值,切断所有非整数内容。

在此过程中,10ddd 被截断为 10

参见 11.2. Type Conversion in Expression Evaluation

我认为使用更严格的 server modes 之一可以关闭,但我在文档中看不到任何内容。如果做不到这一点,我不知道有什么简单的解决方法!

根据值的来源,您可以在执行查询之前检查该值,例如如果在 PHP 中,则使用 is_int();如果值不是整数则退出。

关于mysql - 为什么 "10ddd"在我的 SQL 查询中等于 "10"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5787077/

相关文章:

mySQL 临时表已满

php - 使用选择选项 Laravel 5.2 在插入新记录时将数据添加到数据透视表

c# - 如何使用 C# 中的 select 调用 MySQL 存储过程

java - 如何为 GMT+1 配置 spring 连接到 mysql 数据库

mysql复制列数据类型到另一个表

php - mysql查询时区转换

MySQL条件查询

mysql - PC 上的 MySQL 数据可以有多大?

php - 将查询分组到子数组中

MySQL 从过去 30 天中选择不选择今天的结果