MySQL中FLOAT类型无4字节精度?存储值与预期不符原因探究
关于MySQL FLOAT类型存储精度的疑问
测试SQL代码
CREATE DATABASE float_test; USE float_test; CREATE TABLE float_table (float_field FLOAT); INSERT INTO float_table VALUES (21666.66); SELECT * FROM float_table; DROP DATABASE float_test;
问题描述
执行上述SQL后,查询结果显示为21666.7,但按IEEE754标准,4字节FLOAT本应能更精确地存储21666.66。请问这是什么原因?MySQL是否未按标准处理FLOAT类型?
原因解析
- MySQL的FLOAT类型完全遵循IEEE754标准,问题出在显示精度而非存储精度。21666.66对应的IEEE754单精度浮点实际存储值是
21666.6591796875,这个值被正确存在了数据库中。 - 默认情况下,MySQL对FLOAT类型的查询结果仅显示6位有效数字,所以实际存储的
21666.6591796875会被四舍五入为21666.7展示。 - 可以通过以下方式查看真实存储值:
- 使用格式化函数:
执行后会输出SELECT FORMAT(float_field, 10) FROM float_table;21666.6591796875,即实际存储的精确值。 - 通过计算强制显示更多小数位:
SELECT float_field + 0.0000000000 FROM float_table;
- 使用格式化函数:
总结
MySQL严格按照IEEE754标准存储FLOAT数据,默认显示精度的限制才导致你看到了四舍五入后的结果,并非存储本身不精确。
内容的提问来源于stack exchange,提问作者Arcus
相关产品推荐
相关产品推荐

