文件上说,在标准sql中,语法decimal(m)等价于decimal(m,0)。类似地,语法decimal相当于decimal(m,0),其中允许实现决定m的值。mysql支持这两种不同形式的十进制语法。关于 DECIMAL(M) 或者 DECIMAL(M,0) 我感到困惑的是,对于十进制(m,0),允许实现决定m的值。如果列设置为 DECIMAL(65) , 4.321 将存储为 4 ,那么文档究竟意味着什么呢?
DECIMAL(M)
DECIMAL(M,0)
DECIMAL(65)
4.321
4
vlurs2pr1#
要以不同的方式表达它,并使用mysql选择的值: DECIMAL 手段 DECIMAL(10,0) (需要5个字节) DECIMAL(12) 手段 DECIMAL(12, 0) (其中“12”可以是最大为65的任何值)也就是说,总是有一个m和一个n,无论是显式的还是非显式的。什么时候 N 是 0 ,不存储小数。因此,4.321将存储为4。您可以存储的数字(无舍入或截断)是小数点后不超过n位,小数点前不超过m-n位的数字。
DECIMAL
DECIMAL(10,0)
DECIMAL(12)
DECIMAL(12, 0)
N
0
yhqotfr82#
通过在MySQL5.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/
DECIMAL(M,N)
N=0
M
10
2条答案
按热度按时间vlurs2pr1#
要以不同的方式表达它,并使用mysql选择的值:
DECIMAL
手段DECIMAL(10,0)
(需要5个字节)DECIMAL(12)
手段DECIMAL(12, 0)
(其中“12”可以是最大为65的任何值)也就是说,总是有一个m和一个n,无论是显式的还是非显式的。
什么时候
N
是0
,不存储小数。因此,4.321将存储为4。您可以存储的数字(无舍入或截断)是小数点后不超过n位,小数点前不超过m-n位的数字。yhqotfr82#
通过在MySQL5.6中运行此测试:
插入失败,因为1234.1234不适合(4,2)
运行时插入以下值:
在
DECIMAL(M,N)
,m是数字可以采用的位数,包括小数,n是小数位数。m的最大值为65,n的最大值为30。n必须小于m。如果
N=0
它是0
小数位。如果没有定义n,则小数点似乎是由小于m的整数部分实际占用的位数来定义的,其余的位数根据需要保留给小数点。
如果两者都没有定义
M
默认为10
.有关此处获取的默认值的信息:http://www.mysqltutorial.org/mysql-decimal/