mysql - DECIMAL(M),允许实现来决定 M 的值
问题描述
该文件指出,
在标准 SQL 中,语法 DECIMAL(M) 等价于 DECIMAL(M,0)。类似地,语法 DECIMAL 等价于 DECIMAL(M,0),其中允许实现来决定 M 的值。MySQL 支持这两种 DECIMAL 语法的变体形式。
关于DECIMAL(M)
或DECIMAL(M,0)
我感到困惑的部分是,
对于 DECIMAL(M,0),允许实现来决定 M 的值。
如果一列设置为DECIMAL(65)
,4.321
将存储为4
,那么文档到底是什么意思?
解决方案
通过在 MySQL 5.6 中运行此测试:
create table t(
deci decimal,
deci4 decimal(4),
deci40 decimal(4,0),
deci42 decimal(4,2)
);
insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,1234.1234);
插入失败,因为 1234.1234 不适合 (4,2)
insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,34.1234);
插入以下值运行:
deci deci4 deci40 deci42
1234 1234 1234 34.12
在DECIMAL(M,N)
中,M 是数字可以占据的位数,包括小数,N 是小数位数。M 的最大值为 65,N 的最大值为 30。N 必须小于 M。
如果N=0
是0
小数位。
如果未定义 N,则小数位似乎由小于 M 的数字的整数部分实际占用的位数定义,其余位数根据需要留给小数。
如果两者都未定义,则M
默认为10
.
从这里获取的默认值信息: http ://www.mysqltutorial.org/mysql-decimal/
推荐阅读
- typescript - 在 Typescript 中使用函数作为一等值时,有没有办法传递通用绑定?
- python - 使用 Altair,我如何创建一个矩形颜色层?
- c - 在c中计算校验和(16位)
- reactjs - 反应三纤维和Textureloader不显示
- php - 如何将计费详细信息添加到源 Stripe API
- c# - Google API Auth2 - C# .net 核心
- rust - 对列表列表进行重复数据处理与借用检查器发生冲突
- c# - 如何使用 C# 和 .NET Core 制作转码视频文件流
- sql-server - Flutter 通过身份验证上传和检索资产
- uwp - 无法测试 Windows.Services.Store 命名空间