我们都知道double和float会导致小数不精确,尤其在有关金钱等值的数据类型,一般用decimal,在搜索数据库存金钱的数据类型时
但对于decimal还有疑问,于是请教了下gpt4。以下是问答内容:
问:
mysql中,decimal是为什么是字符串存储
答:
抱歉,您的描述有误。在 MySQL 中, `DECIMAL` 是一种数字数据类型,不是字符串类型。 `DECIMAL` 用于存储精确小数,可以指定精确度和小数位数。例如, `DECIMAL(10,2)` 表示最大总位数为10,小数点后两位。
在 MySQL 中,字符串类型有 `CHAR` 、 `VARCHAR` 、 `TEXT` 等,它们用于存储字符类型的数据,而不是数字类型的数据。如果您的应用程序在 MySQL 中使用字符串存储数字类型的数据,可能会导致性能问题和数据不一致的问题。建议您在数据库设计阶段,根据实际需要将每个字段定义为相应的数据类型,以最大程度地利用数据库的优化机制并保证数据的正确性。
问:
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数
答:
抱歉,我之前的回答有误。在MySQL中,DECIMAL和NUMERIC数据类型不是作为字符串存储。它们实际上是以二进制整数格式存储。此外,当DECIMAL和NUMERIC值被检索时,MySQL将它们转换为十进制格式,而不是浮点数或者字符串格式。
用DECIMAL或NUMERIC数据类型存储小数的优点是:DECIMAL或NUMERIC具有固定的精度,使得计算结果非常准确。相比之下,浮点数存储非常快,但精度受到限制,有时可能存在舍入误差。
总之,在MySQL中,DECIMAL和NUMERIC数据类型是以二进制整数格式存储,并且在检索时转换为十进制格式。如果您需要存储小数,并且需要计算结果非常准确,则建议使用DECIMAL或NUMERIC数据类型。