在64位MySQL实现中,DECIMAL(m,n)列规范和该列的实际表示之间有什么关系?

我在一个上下文中定义表,我知道我需要一个精确的值(因此是DECIMAL),但我不知道我对小数部分的截断错误有多敏感.因此,我想 Select 一个合理利用底层存储的列规范(我知道这是一个64位系统).

尽管进行了合理的搜索,但我还没有在MySQL文档中找到答案.

推荐答案

如果您使用的是64位MySQL版本,这并不重要.十进制支持大于64位的精度.

DECIMAL每9位使用4个字节,剩余的数字使用额外的字节.例如,十进制(32,0)最多支持9+9+9+5位数.前27位将使用4+4+4字节,其余5位将再使用3个字节.总共12+3或15字节.

十进制值的小数部分(小数点后)同样存储数字.所以十进制(32,9)支持整数部分最多9+9+5位,小数部分最多9位.因此,整数为4+4+3字节,小数部分为4字节.

decimal2bin()函数的代码注释中,有一个更详细的描述,包括字节以下的示例:

Mysql相关问答推荐

在MySQL和JavaFX中保存和检索图像文件

无法连接到扩展坞MySQL Unix套接字

使用 awk 重写 maxscale 过滤器

如何同时从同一个表中 Select 从 SQL 表中删除行

仅当其他行相等时才 Select 行值

在分组结果 MySQL 5.7 版中获取最多的重复值

查询以从约会表中获取可用空档

查询给出错误时的 mySQL Group_Concat 和 Case

我将如何构建一个 SQL 查询来从交易表中 Select 第一次存款、第二次存款和额外存款

从一个带有连接的表中删除

从终端访问 MAMP 的 MySQL

如何在sequelize中定义多列的唯一索引

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

如何用一系列日期填充表格?

在 MySQL Workbench EER 图中的多个列上创建唯一约束

如何在 MySQL 中删除此索引?

Python 是否支持 MySQL 准备好的语句?

为什么 GRANT 在 MySQL 中不起作用?

数据截断:第 1 行的logo列数据太长

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询