Mysql int(11)和Oracles nubmer(11) 的区别

先说Mysql int(11)到底代表什么意思

这里的int(11)不是表示限制int的长度为11,而是字符的显示宽度,在字段类型为int时,无论你显示宽度设置为多少,int类型能存储的最大值和最小值永远都是固定的

那么这个显示宽度到底有什么用呢?

当 int 字段类型设置为无符号且填充零(UNSIGNED ZEROFILL)时,当数值位数未达到设置的显示宽度时,会在数值前面补充零直到满足设定的显示宽度,为什么会有无符号的限制呢,是因为 ZEROFILL 属性会隐式地将数值转为无符号型,因此不能存储负的数值
 

CREATE TABLE int_demo (
    id INT(11) NOT NULL AUTO_INCREMENT,
    a INT(11) NOT NULL,
    b INT(11) UNSIGNED ZEROFILL NOT NULL,
    c INT(5) DEFAULT NULL,
    d INT(5) UNSIGNED ZEROFILL NOT NULL,
    e INT(15) DEFAULT NULL,
    PRIMARY KEY (`id`)
)

INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);
INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);

在这里插入图片描述

结论:

1、如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段 b,插入数值 1 显示为00000000001,左边补了 10 个零直至长度达到 11 位;

2、(重点)设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个 10 位数字;

int 类型该存储多大的数据还是存储多大的数据,5只是设置字段显示宽度不影响存储数据大小。

3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了 5 位,这时的显示宽度就起不了作用了

mysql 中整数数据类型:

不同类型的取值范围:

不同数据类型的默认v显示宽度:

Oracles nubmer(11)  到底代表什么意思

oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。

int类型只能存储整数;

number可以存储浮点数,也可以存储整数; number(11,1)存储小数位为1位,总长度为11的浮点数,如果小数位数不足,则用0补全; number(11)存储总长度

oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。

int类型只能存储整数;

number可以存储浮点数,也可以存储整数;

number(11,1)存储小数位为1位,总长度为11的浮点数,如果小数位数不足,则用0补全;

number(11)存储总长度为11的整数;

int相当于number(22),存储总长度为22的整数。
 

oracle number(11)  是真实设置存储长度,没有跟 Mysql int(11) 一样控制显示宽度

参考文档:

mysql中的int(11)到底代表什么意思?_yololee_的博客-CSDN博客_mysql的int(11)

mysql int number_oracle中int与number的区别_银星皓月的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值