首页 > 解决方案 > sql numeric db 列如何与数字字符串值一起使用

问题描述

我有一个与 SQL 有关的问题。

我最近正在编写一个应用程序,其中 sql 查询是根据用户从 UI 的输入动态生成的。有趣的是,从 UI 传递的值列表都是字符串。我被告知要添加对数值的支持。但我注意到传递numeric string value给数字字段也有效。

例如:

Select * from employee where id = 36815

Select * from employee where id = "36815"

我的问题是为什么第二个查询有效。即使我将=运算符更改为<or >,它仍然有效。我想知道它为什么起作用,我们是否应该按原样支持它。对数字 db 列使用数字字符串字段可能有什么缺点。

谢谢。

标签: mysqlsql

解决方案


数据库中的值具有类型。而且,您应该学会不要在表达式中混合类型——尤其是在whereon子句中——因为这种混合会混淆优化器。

你的表情发生了什么?SQL 编译器看到类似:

where <number> = <string>

根据 SQL 的规则,它表示需要将字符串转换为数字。MySQL 通过转换前导数字来做到这一点。所以结果是这样的:

where <number> = cast(string as int)

(尽管允许使用非整数)。

请注意,这不是基于字符串是常量。仅在列的类型上。所以,如果表达式是:

where stringcol = 5

然后stringcol将转换为数字。


推荐阅读