和类型表示FLOAT
近似DOUBLE
数值数据值。MySQL 对单精度值使用四个字节,对双精度值使用八个字节。
对于FLOAT
,SQL 标准允许在括号中的关键字后面以位为单位可选地指定精度(但不是指数的范围)
FLOAT
,即
. MySQL 也支持这个可选的精度规范,但精度值
仅用于确定存储大小。从 0 到 23 的精度产生一个 4 字节的单精度
列。从 24 到 53 的精度会产生一个 8 字节的双精度列。
FLOAT(
p
)FLOAT(
p
)FLOAT
DOUBLE
MySQL 允许非标准语法:
or
or 。这里的
意思是,值总共可以存储最多
位数,其中的
位数可以在小数点后。例如,定义为的列
显示为
。MySQL 在存储值时会进行舍入,因此如果插入
到列中,则近似结果为.
FLOAT(
M
,D
)REAL(
M
,D
)DOUBLE
PRECISION(
M
,D
)(
M
,D
)M
D
FLOAT(7,4)
-999.9999
999.00009
FLOAT(7,4)
999.0001
从 MySQL 8.0.17 开始,不推荐使用非标准
和
语法,您应该期望在未来版本的 MySQL 中删除对它的支持。
FLOAT(
M
,D
)DOUBLE(
M
,D
)
因为浮点值是近似值而不是存储为精确值,所以尝试在比较中将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的影响。有关详细信息,请参阅 第 B.3.4.8 节,“浮点值问题”。
为了获得最大的可移植性,需要存储近似数字数据值的代码应该使用FLOAT
or
DOUBLE PRECISION
,而不指定精度或位数。