sql - MySQL类型转换:为什么浮点数是最常用的分母类型?

  显示原文与译文双语对照的内容
0 0

我最近遇到一个问题,查询引起了一个完整的表扫描,并且它的定义不同。 当查询"string_column = 17"时查询运行时,它不能使用索引。 那真是让我 for 。

所以我搜索并发现发生了什么,我看到的行为与文档的文档一致:

在所有其他情况下,将参数作为浮点( 真实) 数字进行比较。

所以我的问题是。float为什么?

我可以看到试图将数字转换为字符串( 尽管上面链接的MySQL页面中的要点是很好的理由) 。 我还可以理解抛出某种错误,或者生成警告( 我的偏好) 。 而是happily地运行。

那么为什么要把所有东西转换为浮点数? 是来自SQL标准,还是基于其他原因? 谁能给我shed这个选择?

时间: 原作者:

0 0

我感觉到你的痛苦。我们的数据库中有一列,它存在于公司的"订单编号"中。 但它并不总是一个数字,在某些情况下它也可以有其他字符,所以我们将它保存在一个varchar中。 对于 SQL Server 2000,这意味着选择"order_number = 123456"是错误的。 SQL Server 有效地重写谓词 "CAST(order_number, INT) = 123456" 它有两种不良效果:

  1. 索引在 order_number 上作为一个 varchar,因此它开始了一个完整的扫描
  2. 这些非数字顺序数最终会导致转换错误被抛出给用户,而不是有帮助的消息。

非常好,我们有这些非数值"数字数",因为至少有错误的书写查询被捕获,而不只是吸收资源。

我不认为有什么标准。 我记得删除了数字和文本类型之间的一些默认转换,这样在计划查询时这种情况会发生错误。

假设"浮点数"被认为是最宽的数字类型,所以所有数字都可以被静默地提升。

哦,以及类似的问题,当你有一个( 但没有转换错误) 列和一个传递所有字符串字符的Java应用程序时。 突然你的varchar索引不再使用了,祝你找到发生的事情。 我们当然也可以告诉Java应用发送字符串,但是现在我们只使用了 windows-1252,因为这是在 5年前创建的,这是一个。

0 0

很容易理解:float 能够保存最大的数字范围。

如果基础数据类型是 datetime,那么它可以简单地转换为具有相同内部值的浮点数。

如果数据类型是 string,那么很容易将它解析为 float,从而降低性能。

因此float数据类型更适合回退。

原作者:
...