在创建“float with precision”类型的表列时,列被创建为 SQL Server 中的“real”类型

2024-04-15

我创建了一个简单的表格,如下所示:

create table table1
(
col1 float(1),
col2 float
)

当我使用 sp_help 或脚本表作为创建检查表定义时, 我得到的 float(1) 是真实的

CREATE TABLE [dbo].[table1](
[col1] [real] NULL,
[col2] [float] NULL
)

据我了解msdn https://msdn.microsoft.com/en-in/library/ms173773.aspx and 堆栈溢出 https://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server参考,float 的精度 n 范围为 1 到 53。

为什么每当 float 指定了精度时它就会默认转换为实数?


SQL Server 不记得创建表时使用的语言 - 它只是查阅当前表定义并呈现一段文本could已用于创建相同的表。

As the 文档 https://msdn.microsoft.com/en-us/library/ms173773.aspx指出,SQL Server 不支持任意精度 - 它只支持两种精度 - 24 和 53:

SQL Server 对待n作为两个可能值之一。如果124, n被视为24. If 2553, n被视为53.

正如它还指出的那样,real被视为同义词float(24):

ISO 同义词为real is 浮动(24).

因此,任何指定精度为 24 或更低的浮点列实际上都会被创建为float(24)。以及同义词float(24) is real。系统不记得它最初是否被指定为float(1), float(24) or real.


为什么每当 float 指定了精度时它就会默认转换为实数?

事实并非如此。如上所述,如果您创建一个类型为float(25)(或任何更高的精度),您会发现它以普通形式返回float, 而不是real,因为它是作为float(53)当未提供任何精度时,53 是默认精度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在创建“float with precision”类型的表列时,列被创建为 SQL Server 中的“real”类型 的相关文章

随机推荐