gpt4 book ai didi

java - Select count(*) 返回一行,即使我不期望它

转载 作者:行者123 更新时间:2023-11-29 01:16:42 25 4
gpt4 key购买 nike

所以我正在从我的 java 应用程序查询 MySql 数据库,我正在尝试使用查询,

Select count(*) from table where `NUMERIC`='1'

计算数据库中的行数。当我运行此查询时,它工作正常,并且返回 1(我使用的测试数据库有 12 条记录,Numeric 的值为 1-12,所以这是有道理的)。但是我想尝试打破这个并做一些错误处理。我将查询更改为

Select count(*) from table where `Numeric`='1adjfa'

我原以为它会返回 0,但它仍然返回 1。事实上,只要我在值的开头有 1,它就会起作用,如果我将值更改为“adjfa”,它会返回 0。我已经通过我的 Java 应用程序和 MySQL 工作台确认了这一点。关于为什么这会返回 1 的任何想法,即使在它的末尾有垃圾?

最佳答案

两种不同的数据类型不能进行比较。相反,两者之一需要强制转换/强制转换为与另一个相同的数据类型。

在您的情况下,您没有进行强制转换,因此数据库引擎正在进行隐式强制转换。

根据数据类型的优先顺序,数据库引擎选择要强制转换为数字的字符串。

'1adjfa' 因此变成了 1then 正在对您进行比较。

此结果是您的查询实际上是:

Select count(*) from table where `Numeric` = 1

您不应该比较数字和字符串,或者自己进行强制转换,例如...

Select count(*) from table where CAST(`Numeric` AS VARCHAR(32)) = '1adjfa'


就中断查询而言,我希望在您的应用程序中您实际使用的是参数化查询。这将允许您定义参数的数据类型,如果提供了错误的数据类型,您的应用程序应该抛出错误。

关于java - Select count(*) 返回一行,即使我不期望它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com