精华内容
下载资源
问答
  • 详解mysql int类型长度值 mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个长度1并不代表允许存储的宽度,但却...

    详解mysql int类型的长度值

    mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢.

    当时我虽然知道int(1),这个长度1并不代表允许存储的宽度,但却没有一个合理的解释. 或者说对这个长度也没有真正的研究过到底代表什么, 平时都用int(11), 也不知道为什么要11位. 所以我在网上查阅了一些资料, 也仔细的看了mysql手册关于int data type的说法.

    以下是每个整数类型的存储和范围(来自mysql手册)

    在这里插入图片描述

    表格一共有四列分别表式:字段类型, 占用字节数, 允许存储的最小值, 允许存储的最大值.

    我们拿int类型为例:

    int类型, 占用字节数为4byte, 学过计算机原理的同学应该知道, 字节(byte)并非是计算机存储的最小单位, 还有比字节(byte)更小的单位, 也就是位(bit),一个位就代表一个0或1; 8个位组成一个字节; 一般字节用大写B来表示byte, 位用小写b来表示bit.

    计算机存储单位的换算:

    1B=8b

    1KB=1024B

    1MB=1024KB

    那么根据int类型允许存储的字节数是4个字节, 我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0, 最大值为4294967295(即4B=32b, 最大值即为32个1组成);

    接下来我们再说说我们建表时的字段长度到底是怎么一回事.

    CREATE TABLE test (
    id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    number INT( 5 ) NOT NULL
    ) ENGINE = MYISAM ;

    以test表的number字段为例, 大家看到我建的是int(5)

    mysql手册中这个长度/值用"M"来表示的. 细心的朋友应该有注意到过mysql手册上有这么一句话: M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关;

    这句话看上去不太容易理解, 因为这里有个关键词容易让我们混淆, "最大显示宽度"我们第一反应是该字段的值最大能允许存放的值的宽度. 以为我们建了int(1),就不能存放数据10了, 其实不是这个意思.

    这个M=5我们可以简单的理解成为, 我们建立这个长度是为了告诉MYSQL数据库我们这个字段的存储的数据的宽度为5位数, 当然如果你不是5位数(只要在该类型的存储范围之内)MYSQL也能正常存储, 这也就能解释以上标红的话.

    我们把这个字段的"属性"修改为UNSIGNED ZEROFILL看一下效果.

    我们看到现在我的number字段, 长度(M)=5, 属性=UNSIGNED ZEROFILL(无符号,用0来填充位数), 设置这个属性后我往表时插入数据,系统会自动把number字段M不够5位的在左侧用0来填充; 效果如下

    手册上还有这么一句话"当 mysql 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度". 这也让我不禁感叹这个宽度到底如何设置比较合适

    但有一点看完该文档你应该清楚的知道, 长度M与你存放的数值型的数的大小无关.

    展开全文
  • 你可能会见到诸如:int(3)、int(4)、int(8) 之类的 int 数据类型。刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4) 占用的存储空间比 int(8) 小。 后来,参看 MySQL 手册,发现自己...

    MySQL 数据类型中的 integer types 有点奇怪。你可能会见到诸如:int(3)、int(4)、int(8) 之类的 int 数据类型。刚接触 MySQL 的时候,我还以为 int(3) 占用的存储空间比 int(4) 要小, int(4) 占用的存储空间比 int(8) 小。

    后来,参看 MySQL 手册,发现自己理解错了。 

     int(M): M indicates the maximum display width for integer types.

    在 integer 数据类型中,M 表示最大显示宽度。

    原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

    另外,int(M) 只有跟 zerofill 结合起来,才能使我们清楚的看到不同之处。

    MySQL> drop table if exists t;
    MySQL> create table t(id int zerofill);
    MySQL> insert into t(id) values(10);
    
    MySQL> select * from t;
    +------------+
    | id         |
    +------------+
    | 0000000010 |
    +------------+
    
    MySQL> alter table t change column id id int(3) zerofill;
    
    MySQL> select * from t;
    +------+
    | id   |
    +------+
    |  010 |
    +------+
    
    MySQL>
    MySQL> alter table t change column id id int(4) zerofill;
    
    MySQL> select * from t;
    +------+
    | id   |
    +------+
    | 0010 |
    +------+
    
    MySQL>
    MySQL> insert into t(id) values(1000000);
    
    MySQL> select * from t;
    +---------+
    | id      |
    +---------+
    |    0010 |
    | 1000000 |
    +---------+

    从上面的测试可以看出,“(M)”指定了 int 型数值显示的宽度,如果字段数据类型是 int(4),则:当显示数值 10 时,在左边要补上 “00”;当显示数值 100 是,在左边要补上“0”;当显示数值 1000000 时,已经超过了指定宽度“(4)”,因此按原样输出。

    在使用 MySQL 数据类型中的整数类型(tinyint、smallint、 mediumint、 int/integer、bigint)时,非特殊需求下,在数据类型后加个“(M)”,我想不出有何意义。

    另外,在 MySQL 数据类型中,integer 和 int 同义。到底使用哪个,自己看着办吧。

     


     

    详解 MySQL int类型 的长度值问题

     

    MySQL在建表的时候int类型后的长度代表什么?是该列允许存储值的最大宽度吗?为什么我设置成int(1),也一样能存10、100、1000呢。

    当时我虽然知道int(1),这个长度1并不代表允许存储的宽度,但却没有一个合理的解释。或者说对这个长度也没有真正的研究过到底代表什么,平时都用int(11),也不知道为什么要11位。所以我在网上查阅了一些资料,也仔细的看了MySQL手册关于int data type的说法。

    以下是每个整数类型的存储和范围(来自MySQL手册)

    类型字节最小值(带符号的 / 无符号的)最大值(带符号的 / 无符号的)
    TINYINT 1 -128 / 0 127 / 255
    SMALLINT 2 -32768 / 0 32767 / 65535
    MEDIUMINT 3 -8388608 / 0 8388607 / 16777215
    INT 4 -2147483648 / 0 2147483647 /4294967295
    BIGINT 8 -9223372036854775808 / 0 9223372036854775807 /18446744073709551615

    表格一共有四列分别表式:字段类型,占用字节数,允许存储的最小值,允许存储的最大值。

    我们拿int类型为例:

    int类型,占用字节数为4byte,学过计算机原理的同学应该知道,字节(byte)并非是计算机存储的最小单位,还有比字节(byte)更小的单位,也就是位(bit),一个位就代表一个0或1,8个位组成一个字节,一般字节用大写B来表示byte, 位用小写b来表示bit。

    计算机存储单位的换算:

    1B=8b
    1KB=1024B
    1MB=1024KB

    那么根据int类型允许存储的字节数是4个字节,我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0,最大值为4294967295(即4B=32b,最大值即为32个1组成)。

    接下来我们再说说我们建表时的字段长度到底是怎么一回事。

    CREATE TABLE `test` (
    	`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    	`number` INT(5) NOT NULL
    ) ENGINE = MYISAM;

    以test表的number字段为例,大家看到我建的是int(5)

    MySQL手册中这个长度/值用"M"来表示的。细心的朋友应该有注意到过MySQL手册上有这么一句话:

    M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

    这句话看上去不太容易理解,因为这里有个关键词容易让我们混淆,“最大显示宽度”我们第一反应是该字段的值最大能允许存放的值的宽度。以为我们建了int(1),就不能存放数据10了,其实不是这个意思。这个M=5我们可以简单的理解成为,我们建立这个长度是为了告诉MySQL数据库我们这个字段的存储的数据的宽度为5位数,当然如果你不是5位数(只要在该类型的存储范围之内)MySQL也能正常存储,这也就能解释以上标红的话。我们把这个字段的“属性”修改为 UNSIGNED ZEROFILL 看一下效果:

    我们看到现在我的number字段,长度(M)=5,属性=UNSIGNED ZEROFILL(无符号,用0来填充位数),设置这个属性后我往表时插入数据,系统会自动把number字段M不够5位的在左侧用0来填充。效果如下

    手册上还有这么一句话“当 MySQL 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,MySQL 信任地认为所有的值均适合原始的列宽度"。这也让我不禁感叹这个宽度到底如何设置比较合适?

    但有一点看完该文档你应该清楚的知道,长度M与你存放的数值型的数的大小无关。

    展开全文
  • MySQL int 类型长度和范围解惑

    千次阅读 2018-03-26 16:19:00
    开发过程中,新来的小朋友问到: MySQL见表过程中,字段类型int长度是什么意思?最大值是 999999999 吗? 虽然知道 int(1) 这个并不表示只能表示 0-9 等,但是替换到 int(11) 的时候思维有时候会缓不过来,...

    开发过程中,新来的小朋友问到: MySQL见表过程中,字段类型为int的长度是什么意思?最大值是 999999999 吗?

    虽然知道 int(1) 这个并不表示只能表示 0-9 等,但是替换到 int(11) 的时候思维有时候会缓不过来,直到有一次需求要求 指定字符长度 的时候才恍然大悟, int(6) 就是 000001 ~ 099999 等等,但是依旧可以表示 12345678 等数字

    提问

    Mysql 建表过程中:

    1. 字段类型int的长度代表什么?
    2. 是表示值的最大宽度吗?或者是位数吗?
    3. 为什么 int(1) 的时候我可以存储 100、10000、100000 呢,甚至可以存储 2147483647 呢?
    4. 为什么 Int(1) 的时候我不能存储 4294967295 而可以存储 2147483647 ?

    分析

    MySQL中int类型占用4个字节[byte(B)],1B有8个位[bit(b)],一个位(b)就代表一个0或者1,那么MySQL中int占用4B,对应位就是 4*8b = 32b 了,也就是说 int 表示的数字 个数 是: 2的32次方。

    因为字节分有符号和无符号两种,于是 int 有符号 的 范围就是 -2的31次方 到 2的31次方减去1 [?1 为什么不是32次方?] [?2 为什么要减去1?],即 -2147483648 ~ 2147483647; int 无符号(unsigned) 的 范围就是 0 到 2的32次方减去1。

    知道了 int 类型的范围后,我们再来看看长度是什么意思。 在MySQL手册中,字段类型的长度用 “M” 表示,表示最大显示宽度。 int 的 最大有效显示宽度是 255。 注意: 此处表示 显示宽度 和 存储大小或类型及范围 无关

    问中问

    • ?1 为什么不是32次方?
      • 因为有一个位要表示符号
    • ?2 为什么要减去1?
      • 因为 32 位在二进制中最大表示 32 个 1 ,所以就存在着 减去 1

    解答

    1. 字段类型int的长度表示有效宽度,配合 zerofill 的话会更容易理解。 但这个有效宽度并不是表示这个值的范围,也就是说可以超过这个有效宽度
    2. 不是表示这个数字的最大占位宽度,也不是表示这个数字的占位个数。而是表示默认的显示宽度(当 zerrofill 时)
    3. int(1) 的时候可以存储 100、10000、100000,甚至可以存储 2147483647,是因为 int 表示 数值的范围, 1表示有效显示宽度
    4. Int(1) 的时候不能存储 4294967295 而可以存储 2147483647,是因为 int 有 有符号 和 无符号 两种表示方式,你选择的是 有符号的方式。

    总结

    1. 数值类型的长度及范围是两码事,不能混为一谈
    2. MySQL中数值的范围是根据位来确定的
    3. 在创建表的过程中可以根据这个数值的实际范围来选择 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等

    扩展

    • MySQL数值相关的范围及占用字节数

    | 类型 | 占用字节数 | 有符号取值范围 | 无符号取值范围 | |:--:|:------:|:---------------:|:------------:| | TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | | SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 | | MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 | | INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | | BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |

    参考文章

    转载于:https://my.oschina.net/u/616147/blog/1785090

    展开全文
  • 今天在添加数据的时候,发现当数据类型int(11) 时,我当时让用户添加数据时,最大输入的长度为11位,结果,添加数据添加不上,导致出现问题,我又改为最大长度为10位,结果验证9个1的时候是正常的,再次验证9个9...

    原文地址:https://blog.csdn.net/allenjay11/article/details/76549503

    今天在添加数据的时候,发现当数据类型为 int(11) 时,我当时让用户添加数据时,最大输入的长度为11位,结果,添加数据添加不上,导致出现问题,我又改为最大长度为10位,结果验证9个1的时候是正常的,再次验证9个9的时候又失败了。

    经过查询资料,最终找到了关于mysql中的数据类型 int(11)的介绍

    在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。

    这个11代表显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。

    int是整型,(11)是指显示字符的长度,但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数,它不会在前面加0

    声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是 INT整型所允许的最大值。

    MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
    在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。

    注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
    其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响。
    int(10)与int(11)有什么区别,当时觉得就是长度的区别吧,现在看,他们之间除了在存储的时候稍微有点区别外,在我们使用的时候是没有任何区别的。
    int(10)也可以代表2147483647这个值int(11)也可以代表。

    展开全文
  • 用户自己建立由不同类型数据组成的组合的数据结构,它称为结构体 例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的...
  • mysql tinyint和int数据类型的区别

    千次阅读 2017-07-13 20:15:39
    tinyint、smallint、mediumint、int、bigint都是mysql的数据类型,字面意思上从左到右从小到大。 具体范围上: tinyint(-128,127) smallint(-32 768,32 767) mediumint(-8 388 608,8 388 607) int(-2 147 483 ...
  • mysql数据库设计字符类型长度 1.数字类型 小数的我就不聊了,因为有小数点的一般都是用字符串保存。关于整数,有几种可以选TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,分别占1、2、4、8字节。如果无符号,则其...
  • C语言用之前要声明数据类型,否则会出现问题 1.int, unsigned int, long int, long long int C语言中默认的int是signed int,及分配一半的空间给负数。 比如int有4个字节,一个字节有8bit。那么int的取值范围为-2...
  • 下面来详细的说明,不一定准确不一定完整,请多包含或者提出您的建议,我...数字列类型 int、bigint、smallint、tinyint   数字列类型用于储存各种数字数据,如价格、年龄或者数量。数字列类型主要分为两种:整数
  • 当时一听有点蒙,(不知道为什么蒙,后来回来想想可能是觉得考官怎么会问这么简单的问题呢,所以蒙了),当时我的回答是后面的数字代表的是最大能存储的数字的位数吧,但是int类型在mysql里面都是占用4个字节的,...
  • 类型 1、字段类型 MySQL中用来规定实际存储的数据格式。 字段类型在定义表结构时就设定好。 规定类型的字段只能插入相应的数据格式,否则错误。 MySQL有四大数据类型:整数、小数、字符串、时间日期 示例:表中插入...
  • 前言 每种编程语言都有自己所定义的数据类型,mysql也不例外,...Mysql中分为三大数据类型:数值,字符,时间日期 整型 mysql中整数数据类型就有五种: tinyint,smallint,mediumint,int,bigint tinyi...
  • 文章目录一、程序交互二、格式化输出数据类型:三、整数类型int)四、字符串类型(str)五、布尔值类型(bool) 一、程序交互 name = input("please input your username : ") #input输入的内容是字符串,若要整型...
  • 定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出...
  • 这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。 一、数字类型 数字类型按照我的分类方法分为三类:整数类、小数类和数字类。 我所谓的“数字类”,就是指...
  • int和Integer深入分析

    千次阅读 2018-08-27 19:02:23
    1.关于int和Integer的问题区别分析 2.Integer的值缓存的原理 2.1 Java 5 中引入缓存特性 2.2 Integer类中的IntegerCache类 2.3 其他整型类型的缓存机制 3.理解自动装箱和拆箱 3.1 什么是装箱?什么是拆箱? ...
  • 一、前言二、简介三、结论四、...  对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int长度为 11 位,直到有天看到篇文...
  • 昨天在写入SQLServer数据库的时候有一张表把所有的数据字段都写成了VARCHAR类型了,这样的好处就是很简单,出错概率小,麻烦就是如果我要依据一个字段:比如说人的年龄排序的时候就会出错,这里默认都是字符类型的...
  •  比如说有一个string型的3 ,要给它转换成int型的是用(int)3 ,还是用Convert.ToInt32(3); 还是两个都可以用,为什么?    解答:这两个都是转换成整型的,只是它们的长度不同。int为16位的,而下面的那个是32位...
  • 1,定义存储年龄int类型数组,长度为10。 2,循环10次,分别从键盘录入年龄存储到数组中。 3,编写测试类,测试数组初始化。 任务二: 找出班级中的最小年龄和最大年龄。(冒泡排序)/ public class A0 { public ...
  • SQL SERVER中的tinyint:从 0 到 255 的整型数据。...表中的“类型”字段,不会少吧,比如订单有订单类型、取消原因类型等等10来个类型字段,(这些类型,最多有10多个值,再加也多不到哪去),其他的虽然
  • 这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。一、数字类型 数字类型按照我的分类方法分为三类:整数类、小数类和数字类。 我所谓的“数字类”,就是指DECIMAL和...
  • Integer类型的对象包括了int型的单个域。由于java.lang.Integer是一个类,因此它提供了一些方法来对其对象进行操作。 Java 5 引入了自动装箱和自动拆箱的概念。使得开发者不需要注意基本类型如:int long等.....
  • MYSQL里有些比较隐晦的知识点,经常被稀里糊涂的用错而不自知。以前评审过程发生的次数较多,索性随手写一些出来。...只要是int类型,在数据库里的存储就一定是4个字节。 有符号整型:从-2^31(-2147483648) 到 2^...
  •  不同的平台上对不同数据类型分配的字节数是不同的。   个人对平台的理解是CPU+OS+Compiler,是因为:   1、64位机器也可以装32位系统(x64装XP);   2、32位机器上可以有16/32位的编译器(XP上有tc是16...
  • MySQL的列类型主要有三种:数字、字串和日期。   mysql官方说明文档: http://dev.mysql.com/doc/refman/5.1/zh/data-types.html  下面来详细的说明,不一定准确不一定完整,请多包含或者

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,330
精华内容 20,132
关键字:

年龄int型长度