MySQL 8.4 Release Notes
13.1.4 浮点数类型(近似值)- FLOAT, DOUBLE
FLOAT 和 DOUBLE 类型表示近似数字数据值。MySQL 对单精度值使用四个字节,对双精度值使用八个字节。
对于 FLOAT,SQL 标准允许在关键字 FLOAT 之后添加可选的精度(但不包括指数范围)括号中,即FLOAT(
。MySQL 也支持这个可选的精度指定,但是在p
)FLOAT(
中的精度值仅用于确定存储大小。精度从 0 到 23 结果是一个四字节单精度 FLOAT 列,精度从 24 到 53 结果是一个八字节双精度 DOUBLE 列。p
)
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 的非标准扩展;并且已经弃用。你应该预期在未来版本中这些变体的支持将被删除。M
,D
)
由于浮点值是近似值,不是精确值,尝试对它们进行精确比较可能会出现问题。它们也受平台或实现依赖性影响。更多信息,请参见 第 B.3.4.8 节,“浮点值问题”。
为了最大化端口性,需要存储近似数字数据值的代码应该使用FLOAT
或DOUBLE PRECISION
,不指定精度或数字位数。