浮点数在数据库 Sql Server 中存储为 Real
Posted
技术标签:
【中文标题】浮点数在数据库 Sql Server 中存储为 Real【英文标题】:Float stored as Real in database Sql Server 【发布时间】:2017-05-28 11:23:19 【问题描述】:为什么Float
在sys.columns
或Information_schema.columns
中存储为Real
precision <= 24
。
CREATE TABLE dummy
(
a FLOAT(24),
b FLOAT(25)
)
检查数据类型
SELECT TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
NUMERIC_PRECISION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'dummy'
结果:
+------------+-------------+-----------+-------------------+
| TABLE_NAME | COLUMN_NAME | DATA_TYPE | NUMERIC_PRECISION |
+------------+-------------+-----------+-------------------+
| dummy | a | real | 24 |
| dummy | b | float | 53 |
+------------+-------------+-----------+-------------------+
那么当precision
小于或等于24
时,为什么float
存储为real
。这是否记录在某处?
【问题讨论】:
非常similar question 【参考方案1】:来自MSDN article,它讨论了 T-SQL 中 float
和 real
之间的区别:
real 的 ISO 同义词是 float(24)。
float [ (n) ]
其中 n 是用于以科学计数法存储浮点数尾数的位数,因此,它决定了精度和存储大小。如果指定了 n,则必须是 1 到 53 之间的值。n 的默认值为 53。
n value | Precision | Storage size
1-24 | 7 digits | 4 bytes
24-53 | 15 digits | 8 bytes
SQL Server 将 n 视为两个可能值之一。 如果 1
至于为什么 SQL Server 将其标记为real
,我认为它只是一个同义词。然而,在引擎盖下它仍然是float(24)
。
【讨论】:
@Prdp 我不认为它将它存储为real
,而是float(24)
。将其标记为real
。
正在比较两个相似数据库之间的数据类型。这个Real
让我发疯了,因为我们不使用Real
创建数据类型:D。后来我意识到Float
存储为Real
【参考方案2】:
real 的 ISO 同义词是 float(24)。
Please refer for more info:
https://msdn.microsoft.com/en-us/library/ms173773.aspx
【讨论】:
没关系,但为什么它存储为Real
而不是Float(24)
嗨,Pradeep,我认为它只是一个同义词。文档清楚地表明,在引擎盖下它仍然只是一个float(24)
。以上是关于浮点数在数据库 Sql Server 中存储为 Real的主要内容,如果未能解决你的问题,请参考以下文章