首页
学习
活动
专区
圈层
工具
发布

mysql数据库int长度

基础概念

MySQL中的INT是一种整数数据类型,用于存储整数值。INT类型的长度指的是该类型数据的显示宽度,而不是存储大小或值的范围。显示宽度只影响整数值的显示方式,不影响其存储或计算。

类型

  • TINYINT: 1字节,范围从-128到127(有符号),或0到255(无符号)。
  • SMALLINT: 2字节,范围从-32,768到32,767(有符号),或0到65,535(无符号)。
  • MEDIUMINT: 3字节,范围从-8,388,608到8,388,607(有符号),或0到16,777,215(无符号)。
  • INT: 4字节,范围从-2,147,483,648到2,147,483,647(有符号),或0到4,294,967,295(无符号)。
  • BIGINT: 8字节,范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号),或0到18,446,744,073,709,551,615(无符号)。

应用场景

INT类型通常用于存储不需要小数部分的数值,如年龄、ID号、数量等。选择哪种整数类型取决于所需值的范围和存储空间的限制。

遇到的问题及解决方法

问题:为什么设置了INT(11)但显示的数字位数不对?

  • 原因:INT类型的长度(如INT(11))只影响显示宽度,并不影响实际存储的值。如果设置的长度小于实际值的位数,MySQL会自动扩展显示宽度以适应实际值。
  • 解决方法:如果需要确保值的显示格式,可以使用ZEROFILL属性。例如,INT(11) ZEROFILL会在数值前补零,直到达到指定的长度。
代码语言:txt
复制
CREATE TABLE example (
    id INT(11) ZEROFILL AUTO_INCREMENT PRIMARY KEY,
    number INT(5) ZEROFILL
);

问题:为什么使用无符号整数?

  • 原因:无符号整数可以存储更大的正数值,因为它们不使用任何位来表示负数。
  • 解决方法:如果确定某个字段只存储非负数,可以考虑使用无符号整数类型,以节省存储空间并扩大值的范围。
代码语言:txt
复制
CREATE TABLE example (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    age INT UNSIGNED
);

参考链接

通过以上信息,您可以更好地理解MySQL中INT类型的长度及其应用场景,并解决相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql中int长度的意义

提问: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?...回答: 不同,int(3)最多显示3位无符号整体,int(6)最多显示6位无符号数。 如果你的答案和上面的一致,恭喜你和我犯了一样的错误。...发现,无论是int(3), int(6), 都可以显示6位以上的整数。但是,当数字不足3位或6位时,前面会用0补齐。...查下手册,解释是这样的: MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。...也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。

5.6K10
  • MYSQL 数据库时间字段 INT,TIMESTAMP,DATETIME 性能效率比较

    原文 | http://1t.click/FAB 在数据库设计的时候,我们经常会需要设计时间字段,在 MYSQL 中,时间字段可以使用 int、timestamp、datetime 三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高...=1, `d_int` int(11) NOT NULL DEFAULT '0', `d_timestamp` timestamp NULL DEFAULT NULL, `d_datetime...>400000 AND d_int<600000 查询花费 0.0780 秒 SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int...d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000 查询花费 0.2944 秒 对于 timestamp 类型,有了索引,反倒不建议使用 MYSQL...d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000 查询花费 0.9994 秒 对于 datetime 类型,同样有了索引,反倒不建议使用 MYSQL

    8.4K30

    MySQL的int (10) 和 int (11) 的区别

    显示宽度只是指明 mysql 最大可能显示的数字个数,数值的位数小于指定的宽度时左侧用数字 0 填充。...同理,所以 int (10) 和 int (11) 无任何区别,就是显示宽度不同。...在存储方面确实没什么不同,设置长度只有在设置了自动填充 ZEROFILL 的时候才体现出来, 比如 id=1 长度为 int (5) 的话会显示 00001。...Mysql 可以为整数类型指定宽度,例如 INT (11),对大多数应用这是没有意义的:他不会限制值的合法范围,只是规定了 Mysql 的一些交互工具,如 Mysql 命令行客户端,用来显示字符的个数。...对于存储和运算来说, INT (1) 和 INT (8) 是相同的。 是的,设置自动填充的时候用来显示补充0有点 用而已

    2.7K30

    聊聊Mysql中的int(1)

    昨天有个读者问了我这样一个问题在mysql中建表的时候,我设置一个字段为int类型,长度为1,但是我发现这个字段却可以存储任意长度的数字,这是什么情况?...Zerofill:零填充,意思就是达不到指定长度后,前面用 0 来填充。 现在再来看看这个int(1)中的1究竟有什么奥秘。这个1跟这个字段能存的数据范围没关系,它也不是限制这个字段的数据长度的。...比如我们将int(1)改成int(3),我们再输入1,实际上显示的是001。所以无论你将 int 类型的长度设为多少并不会影响数据的存储范围。...mysql对于整型的数据类型,不仅给我们提供了int,还提供了tinyint,smallint,mediumint和bigint。...再来聊一聊一个常见的面试题:int类型做自增主键有没有可能存储完? 肯定是有的,都有数据范围了,主键一直增长肯定有可能会达到这个范围。 很多小伙伴是不是心中飘过一万匹草泥马,忙着修改数据库去了。

    2.7K20

    MySql中int(10)与int(11)有什么区别吗?

    0 1 引言 依稀还记得有次面试,有面试官问我int(10)与int(11)有什么区别,当时觉得就是长度的区别吧!面试官最后也没有给反馈,我也就以为自己答对了。...最后查出的结果是:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储 3个长度的数字,int(11)就会存储 11 个长度的数字,这是大错特错的。...我们通常在创建数据库的时候都不会加入这个选项,所以可以说他们之间是没有区别的。...MySQL 类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。...0 3 总结 所以,int(2) 与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与 MySQL 需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限依旧是

    6.5K30

    mysql数据库:数据库修改字段的长度是否会对程序产生影响?

    好了,说一下我的问题 问题 使用框架自动生成了前端页面和controller层、entity层等代码后,发现数据库中对name设置的字段长度不统一,想要将长度为255的name字段统一变为80。...这就在考虑一个问题,修改字段长度会不会影响程序正常运行,尤其是自动生成的部分代码,涉及到很多表,还要重新生成编译,感觉很是麻烦,又不敢不生成。...解决办法 通过查询和寻问大佬,发现修改字段长度会不会影响程序,是要分情况的: 1.增长字段长度 理论上是不会影响程序正常运行的(在你没有其他骚操作的情况下)。...2.缩减字段长度 数据库对应字段尚未存入数据情况下,不会影响程序正常运行。 数据库对应字段存入数据,但是数据长度没有超过缩减到的长度的情况下,不会影响程序正常运行。...数据库对应字段存入数据,数据长度超过缩减到的长度的情况下,会影响程序正常运行,需要修改程序对应部分。 由于在赶项目的进度,所以就没有深入探究原理,先欠上,日后一定补回来!

    56110

    mysql类型int长度是11,最多可以有多少条数据?如果超过超过设计值会怎么样?

    mysql类型int长度是11,最多可以有多少条数据?如果超过超过设计值会怎么样大家好,我是星哥,今天查看数据库在表结构中看到id,设计是int,长度是11。...一、首先要区分两个概念:在 MySQL 中,定义字段时写成:INT(11)这里的 11 不是“长度限制”! 它只是显示宽度(Display Width),对实际存储范围没有任何影响。...以前在 MySQL 的 命令行客户端 或某些工具中,如果字段设置了 ZEROFILL(零填充),会影响显示方式:CREATE TABLE t ( id INT(11) ZEROFILL);INSERT...PRIMARY KEY, name VARCHAR(100));MySQL 会自动维护一个内部的自增计数器。...后,再执行:INSERT INTO test VALUES ();MySQL 会报错:ERROR 1467 (HY000): Failed to read auto-increment value from

    1.2K10

    【MySQL 】MySQL 中的 int(11) 到底代表什么意思?

    一、前言   在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番。 二、简介 ?   ...对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度为 11 位,直到有天看到篇文章才明白,11...代表的并不是长度,而是字符的显示宽度,在字段类型为 int 时,无论你显示宽度设置为多少,int 类型能存储的最大值和最小值永远都是固定的,这里贴一些原文片段。   ...00000000001,左边补了 10 个零直至长度达到 11 位;   2、设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个...10 位数字;   3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了

    4.9K20

    当MySQL的int不够用了

    关于int的长度 很多时候看到int(8)这样的定义,其实这是工具导出的不专业。 int是范围,不是长度。 在开发有了共识(知道这个长度不算数,要看范围)以后,上来就是所有的类型都是bigint。...int的范围 int的取值范围是 TINYINT:占用1个字节(8位),取值范围是-128到127(有符号),或者0到255(无符号)。...所以都是bigint不太合适 我个人建议 MySQL的表,如果要自增ID当主键的,那么就是用int就行。可以放21亿条数据。现如今99.99%的系统中的数据表没这么多数据。...实操测试 在MySQL中当列有数据库的时候改类型是可以的。(不是所有都这样,Oracle就不允许) 在b列有数据的时候改类型。成功。 在这个基础上给id列写入最大值以及模拟越界。...这时候把int列改成无符号型,又可以写入了。理论写入42亿条。

    24310

    MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)

    MySQL提供了多种数值型数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大。...MySQL 主要提供的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。...下表中列出了 MySQL 中的数值类型。...类型名称说明存储需求TINYINT很小的整数1个字节SMALLINT小的整数2个宇节MEDIUMINT中等大小的整数3个字节INT (INTEGHR)普通大小的整数4个字节BIGINT大整数8个字节从上表中可以看到...类型名称说明存储需求TINYINT-128〜1270 〜255SMALLINT-32768〜327670〜65535MEDIUMINT-8388608〜83886070〜16777215INT (INTEGER

    85710
    领券