MySQL 9.0 发行说明
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
,并且不指定精度或位数。