MySQL 8.3 Release Notes
类型 FLOAT
和 DOUBLE
代表近似数值数据。MySQL 使用四个字节存储单精度值,八个字节存储双精度值。
对于 FLOAT
,SQL 标准允许在括号中指定精度(但不指定指数范围)紧跟在关键字 FLOAT
后,即 FLOAT(
。MySQL 也支持这种可选的精度规范,但在 p
)FLOAT(
中的精度值仅用于确定存储大小。精度从 0 到 23 将结果在 4 字节单精度 p
)FLOAT
列中。精度从 24 到 53 将结果在 8 字节双精度 DOUBLE
列中。
MySQL 允许非标准语法:FLOAT(
或 M
,D
)REAL(
或 M
,D
)DOUBLE PRECISION(
。这里,M
,D
)(
表示可以存储最多 M
,D
)M
位数字,其中 D
位数字可以在小数点后。例如,定义为 FLOAT(7,4)
的列将显示为 -999.9999
。MySQL 在存储值时执行舍入,因此如果您将 999.00009
插入到 FLOAT(7,4)
列中,近似的结果将是 999.0001
。
FLOAT(
和 M
,D
)DOUBLE(
是非标准的 MySQL 扩展;它们已弃用。您应该期望在未来版本的 MySQL 中删除对这些变体的支持。M
,D
)
因为浮点值是近似的,不存储为精确值,因此在比较中将它们视为精确值可能会导致问题。它们也受到平台或实现依赖的影响。有关更多信息,请参阅 第 B.3.4.8 节,“浮点值的问题”。
为了最大限度地提高可移植性,需要存储近似数值数据的代码应该使用 FLOAT
或 DOUBLE PRECISION
,不指定精度或数字位数。