是Postgres Float等效于sql server float

时间:2020-06-09 16:15:26

标签: sql-server postgresql

我正在将sqlserver数据库转换为PostgreSQL,并且在SQL Server中看到一些列声明为Float。我只想在PostgreSQL中声明该列为float,但是我想知道这种转换是否足够好。在PostgreSQL中声明FLOAT(20)更好吗?还是仅FLOAT就足够了?

1 个答案:

答案 0 :(得分:1)

两个DBMS都将不带精度参数的FLOAT解释为FLOAT(53)(全精度双精度浮点数)。精度值等于或小于24可能会将内部表示形式更改为单精度浮点数,考虑到您拥有FLOAT(20),这似乎是您的情况。

在Postgres和MS SQL中,数据库在内部仅使用类型为REAL(32位)或DOUBLE PRECISION(64位)的列。 precision参数仅确保浮点数的尾数具有特定的最大精度(较长的尾数会被截断)。

FLOAT(20)在两个DBMS上都是等效的,而FLOAT将为您提供额外的33位精度,您可能需要也可能不需要。 FLOAT / REAL / DOUBLE PRECISION列在SQL中很少见,很难,大多数人会改用NUMERIC,而Postgres文档实际上指出了这一点。不过,考虑到这是一次迁移,您可能要对此保持保守。

https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-FLOAT

https://docs.microsoft.com/en-us/sql/t-sql/data-types/float-and-real-transact-sql?view=sql-server-ver15