首页 > 数据库 >MySQL中数据类型宽度

MySQL中数据类型宽度

时间:2022-10-24 18:36:10浏览次数:48  
标签:INT 数据类型 ZEROFILL 宽度 MySQL NULL 取值

一、数据类型的取值范围和宽度

  • 字段类型对应的取值范围:
类型 字节 有符号取值范围 无符号取值范围
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32768 ~ 32767 0 ~ 65535
MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215
INT、INTEGER 4 -2147483648 ~ 2147483647 0 ~ 4294967295
BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615
  • 类型默认的显示宽度:
类型 宽度
TINYINT 4
SMALLINT 6
MEDIUMINT 9
INT、INTEGER 11
BIGINT 20

MEDIUMINT 类型用肉眼数的话, 按负值“-8388608”的宽度算,应该是8,但实际默认值是9。其实默认值是按:”无符号最大值的宽度”+1 来计算的“。

显示宽度只是指明MYSQL最大可能显示的数字个数,数值的位数小于指定的宽度时会有空格填充,取决于你的设置。如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入显示出来。

显示宽度只用于显示,并不能限制取值范围和占用空间。比如INT(3)依旧还是占用4个字节的存储空间。

二、验证及结果

1、创建表语句

注:mysql 中的 ZEROFILL 意思是补零。格式为字段名 INT(M)  ZEROFILL 。在插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0

创建表时,可以在INT后面加入数值。请注意这个数值不代表数据的长度。例如id字段的数据类型为INT(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数,实际存储的长度还是上表中INT的取值范围即-2147483648~2147483648。

DROP TABLE IF EXISTS tab_type;
CREATE TABLE `tab_type` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `tint` TINYINT(2) ZEROFILL NOT NULL DEFAULT '0',
  `sint` SMALLINT(3) ZEROFILL NOT NULL DEFAULT '0',
  `mint` MEDIUMINT(4) ZEROFILL NOT NULL DEFAULT '0',
  `bint` BIGINT(5) ZEROFILL NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1;

2、插入测试数据,查询结果

INSERT INTO tab_type VALUES(NULL,250,250,250,250);
SELECT * FROM tab_type;

 3、查看DDL信息

可以发现当使用 zerofill 时,编译器默认会自动加 unsigned(无符号)属性,使用 unsigned 属性后,数值范围是原值的2倍。【就是不能插入负数了】

4、测试插入负数

INSERT INTO tab_type VALUES(NULL,-125,-125,-125,-125);

查看报错信息可知,插入的数据超出取值范围

TIP:从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性。

标签:INT,数据类型,ZEROFILL,宽度,MySQL,NULL,取值
From: https://www.cnblogs.com/godzzz/p/16822282.html

相关文章

  • springboot整合elasticsearch实现MySQL模糊查询
    es关联mysql实现模糊查询的数据流:   1、使用logstash同步mysql数据到eslogstash简介及基本操作:https://blog.csdn.net/yurun_house/article/details/109025588win......
  • mysql事务和隔离级别学习--笔记
    一、MySQL事务1、什么事事务事务(transaction)就是一个最小的单独任务单元由一个或多个SQL语句组成,在这个任务单元中,每个SQL语句都是相互依赖,整个任务单元是作为一个不可分......
  • KYLIN(麒麟系统)下安装MySQL5.0
    1groupaddmysql2useradd-gmysqlmysql3#修改密码4passwdmysql5cd/usr/local6#解压文件7tar-zxvfmysql-standard-5.0.15-linux-i686.tar.gz8......
  • mysql InnoDB建表时设定初始大小的方法
    InnoDB在写密集的压力时,由于B-Tree扩展,因而也会带来数据文件的扩展,然而,InnoDB数据文件扩展需要使用mutex保护数据文件,这就会导致波动。丁奇的博客说明了这个问题:WhenInno......
  • 六大数据类型
    不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组);可变数据(3个):List(列表)、Dictionary(字典)、Set(集合)。字符串操作1.format()格式化字符串2.count()用于统计字符串里......
  • MySQL 中 不等于 会过滤掉 Null 的问题
    1.原因: 在写SQL条件语句时经常用到不等于!=的筛选条件。  此时要注意此条件会将字段为Null的数据也当做满足不等于的条件而将数据筛选掉。 2.实例:表A ......
  • Mac下安装MySQL详细图文步骤
    1.安装包下载下载链接:https://downloads.mysql.com/archives/community/为了安装更方便,建议下载和mac电脑版本匹配的mysql的dmg安装包,我的电脑Mac版本是12.5的,所以下载......
  • WGCLOUD无法连接到mysql数据库的原因
    WGCLOUD有时候连不上mysql数据库,我们按照以下几点来排查下:1.我们首先检查server/config/application.yml中mysql连接配置是否正确,比如用户名密码这些2.再检查mysql是否已......
  • Mysql优化学习38-备库延迟太大,怎么办
    我们使用之前用的命令:showslavestatus\G;查看一下有个参数:##1.复制原理##2.备库延迟原因##3.处理方法##4.依然存在的问题......
  • mysql数据库指定ip远程访问(设置远程连接),赋权操作
    mysql数据库指定ip远程访问(设置远程连接)远程访问mysql报错,ip不允许链接的情况:错误号码1045Accessdeniedforuser'用户名'@'数据库地址'(usingpassword:YES) 查......