【mysql知识点整理】--- int(N),char(N)、varchar(N),decimal(M,N)中的N、M是什么意思???


1 int(N)、tinyint(N)、bigint(N)等数据类型中N的含义

注意: N只是显示宽度, 不表示存储数字长度的上限。


2 float(M,N)、decimal(M,N)中M、N的含义

注意: N表示小数的位数,M表示数据的总长度(小数的位数+整数的位数),则整数的位数为M-N。


3 char(N)和varchar(N)中N的含义

首先应该明确char是定长的,而varchar的长度是可变的。

  • 因此char(N)中的N其实有两层意思:
    • (1)表示最大字符长度不允许超过N,不区分中英文。
    • (2)即使字符长度小于N,在数据库里也会占N个字符长度。 === 这里要与varchar区别一下,对varchar而言如果字符的实际长度为L,而L小于N的话,在数据库里该字符就只占L个字符长度。

  • varchar(N)中的N就是表示最大字符长度不允许超过N,不区分中英文。

4 简单总结+注意事项

  • 总结:

int 、tinyint 、bigint等整型数据类型中的N只是显示宽度 — 这个是最特别的,其他数据类型中的M或N都与存储数据的长度有关。

  • 注意:

M、N可以限制数据的存储长度,但是每一个数据类型可存储数据的最大长度是固定的,并不是由M、N来指定的。

举个栗子,字符类型可存储数据的最大长度如下:

类型说明N的含义是否有字符集最大长度
CHAR(N)定长字符字符255
VARCHAR(N)变长字符字符16384
BINARY(N)定长二进制字节字节255
VARBINARY(N)变长二进制字节字节16384
TINYBLOB(N)二进制大对象字节256
BLOB(N)二进制大对象字节16K
MEDIUMBLOB(N)二进制大对象字节16M
LONGBLOB(N)二进制大对象字节4G
TINYTEXT(N)大对象字节256
TEXT(N)大对象字节16K
MEDIUMTEXT(N)大对象字节16M
LONGTEXT(N)大对象字节4G

以char而言,它能存储数据的最大长度其实为255个字符,但是为了节省数据库资源,我们往往会结合自己的实际项目,通过N来进一步限制它存储的数据在数据库里具体占的字符大小。


5 int(N)验证

5.1 验证1 —> 大于N长度的数字可以正常插入到数据库

  • 建立如下表:
CREATE TABLE `test_int_n` (
  `id` int(4) 
)
  • 插入如下两条数据:
insert into test_int_n values(1);
insert into test_int_n values(123456);
  • 可以看到比长度4大的123456也被插入到数据库里了:

在这里插入图片描述


5.2 验证2 —> N只是表示显示宽度

5.2.1 使用zerofill关键字进行验证

  • 建立如下表:
CREATE TABLE `test_int_n1` (
  `id` int(4) zerofill
)

为了比较明显的显示出效果,上面的建表语句加了一个关键字zerofill,该关键字的作用如下:

当存储的数字长度 < N 时,用数字0填充左边,直至补满长度N

  • 同样插入如下两条数据:
insert into test_int_n1 values(1);
insert into test_int_n1 values(123456);
  • 通过下图就可以看到效果了:

在这里插入图片描述
注意: Navicat可能显示不出来效果,我这里用的是MySQL Workbench,当然用命令行也可以显示出来效果。


5.2.2 使用zerofill关键字时需要注意的一个小坑

这里有一点需要格外注意:如果你使用了zerofill关键字mysql会自动给你多加一个unsigned关键字,我们来看一下我创建的test_int_n1表的DDL语句:

在这里插入图片描述
插入负数报错效果截图:
在这里插入图片描述
同时还要注意,使用了zerofill关键字,虽然对长度小于N的数字进行了填充,但该数字还是该数字,值并未改变,只是显示改变了。验证结果如下:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值