1. tinyint: 只能存储-128到127大小的数字, 不在乎后面的定义,如tinyint(9). 需1字节存储空间。 当加有UNSIGNED后,数字可以从0增加到255大小。

dba@localhost : test 22:36:25> create table ti(id tinyint(9), no tinyint(1));

Query OK, 0 rows affected (0.03 sec)

dba@localhost : test 22:36:44> insert into ti values(129,130);

Query OK, 1 row affected, 2 warnings (0.00 sec)

dba@localhost : test 22:37:31> show warnings;

+---------+------+---------------------------------------------+

| Level | Code | Message |

+---------+------+---------------------------------------------+

| Warning | 1264 | Out of range value for column 'id' at row 1 |

| Warning | 1264 | Out of range value for column 'no' at row 1 |

+---------+------+---------------------------------------------+

2 rows in set (0.00 sec)

这里在插入数据时会报出警告,是因为SQL_MODE的关系。MYSQL这里默认设置为空, 允许超出范围的数据插入, 只给出一个警告。

可以查询下这个表:

dba@localhost : test 22:37:39> select * from ti;

+------+------+

| id | no |

+------+------+

| 127 | 127 |

+------+------+

1 row in set (0.00 sec)

这个时候是允许插入负数的。

dba@localhost : test 22:49:40> insert into ti values(-9,9);

Query OK, 1 row affected (0.00 sec)

dba@localhost : test 22:50:06> select * from ti;

+------+------+

| id | no |

+------+------+

| 127 | 127 |

| -9 | 9 |

+------+------+

2 rows in set (0.00 sec)

为了不让数据库产生负数的值, 我们可以修改下这个字段的类型参数:

dba@localhost : test 22:46:25> alter table ti modify no tinyint unsigned;

Query OK, 1 row affected (0.01 sec)

Records: 1 Duplicates: 0 Warnings: 0

dba@localhost : test 22:50:18> insert into ti values(-9,-9);

Query OK, 1 row affected, 1 warning (0.00 sec)

dba@localhost : test 22:51:20> show warnings;

+---------+------+---------------------------------------------+

| Level | Code | Message |

+---------+------+---------------------------------------------+

| Warning | 1264 | Out of range value for column 'no' at row 1 |

+---------+------+---------------------------------------------+

1 row in set (0.00 sec)

dba@localhost : test 22:51:27> select * from ti;

+------+------+

| id | no |

+------+------+

| 127 | 127 |

| -9 | 9 |

| -9 | 0 |

+------+------+

3 rows in set (0.00 sec)

可以看到NO字段插入-9, 直接被截成0了。

在对TIINYINT增加了UNSIGNED后, 从-128 至 127 变成了 0 至 255.

dba@localhost : test 22:51:37> insert into ti values(1,258);

Query OK, 1 row affected, 1 warning (0.00 sec)

dba@localhost : test 22:54:08> select * from ti;

+------+------+

| id | no |

+------+------+

| 127 | 127 |

| -9 | 9 |

| -9 | 0 |

| 1 | 255 |

+------+------+

4 rows in set (0.00 sec)

此类型的字段应用场景: 如果有业务字段只存储性别、状态、类型等少量值的时候,就可以使用此类型的字段。

2. smallint: 只能存储-32768到32767大小的数字, 不在乎后面的定义,如smallint(9). 需2字节存储空间。对字段加上UNSIGNED后,数字大小就可以从0增加到65535大小。

dba@localhost : test 23:00:21> create table ts(id smallint(1), no smallint(10) unsigned);

Query OK, 0 rows affected (0.01 sec)

dba@localhost : test 23:01:51> insert into ts values(-32768,32768);

Query OK, 1 row affected (0.00 sec)

dba@localhost : test 23:02:30> select * from ts;

+--------+-------+

| id | no |

+--------+-------+

| -32768 | 32768 |

+--------+-------+

1 row in set (0.00 sec)

从以上可以看出, 我们存储了一个带符号的值,也就是负数,长度为1,这个也超出了我们的设置。 另外, 对字段加上UNSIGNED后,数字就可以存储超过32767的值。

应用场景: 当需要的值比TINYINT要多,而又不需要超过65535的时候就可以使用这个类型。

3. mediumint: 只能存储-8388608 到 8388607大小的数字, 不在乎后面的定义,如mediumint(9). 需3字节存储空间。对字段加上UNSIGNED后,数字大小就可以从0增加到16777215大小.

dba@localhost : test 23:13:10> create table tm(id mediumint(1), no mediumint(10) unsigned);

Query OK, 0 rows affected (0.01 sec)

dba@localhost : test 23:13:21> insert into tm values(-8388608,16777216);

Query OK, 1 row affected, 1 warning (0.00 sec)

dba@localhost : test 23:14:44> select * from tm;

+----------+----------+

| id | no |

+----------+----------+

| -8388608 | 16777215 |

+----------+----------+

1 row in set (0.00 sec)

从以上可以看出, 字段长度为1, 而存储的值远远超过1位。字段加UNSIGNED,就可以存储0到16777215的数字。

应用场景:当需要的值比SMALLINT的值多些,而又不需要超过16777215大小的时候就可以利用这个类型。

4. int/integer: 只能存-2147483648 到 2147483647大小的数字, 不在乎后面的定义,如int(9). 需4字节存储空间。对字段加上UNSIGNED后,数字大小就可以从0增加到4294967295大小.

dba@localhost : test 23:14:52> create table tn(id int(1), no int(10) unsigned);

Query OK, 0 rows affected (0.01 sec)

dba@localhost : test 23:22:20> insert into tn values(-2147483648,4294967296);

Query OK, 1 row affected, 1 warning (0.00 sec)

dba@localhost : test 23:22:22> select * from tn;

+-------------+------------+

| id | no |

+-------------+------------+

| -2147483648 | 4294967295 |

+-------------+------------+

1 row in set (0.00 sec)

从以上可以看出, 字段长度为1, 而存储的值远远超过1位。字段加UNSIGNED,就可以存储0到4294967295的数字。

应用场景:当需要的值比mediumint的值多些,而又不需要超过4294967295大小的时候就可以利用这个类型。 通常主键字段会以INT类型自增的形式。

5. bigint: 只能存-9223372036854775808 到 9223372036854775807大小的数字, 不在乎后面的定义,如bigint(9). 需8字节存储空间。对字段加上UNSIGNED后,数字大小就可以从0增加到18446744073709551615大小.

dba@localhost : test 23:22:28> create table tb(id bigint(1), no bigint(10) unsigned);

Query OK, 0 rows affected (0.01 sec)

dba@localhost : test 23:27:40> insert into tb values(-9223372036854775808,18446744073709551616);

Query OK, 1 row affected, 1 warning (0.01 sec)

dba@localhost : test 23:28:41> select * from tb;

+----------------------+----------------------+

| id | no |

+----------------------+----------------------+

| -9223372036854775808 | 18446744073709551615 |

+----------------------+----------------------+

1 row in set (0.00 sec)

从以上可以看出, 字段长度为1, 而存储的值远远超过1位。字段加UNSIGNED,就可以存储0到18446744073709551615的数字。

应用场景:当需要的值比int的值多些,而又不需要超过18446744073709551615大小的时候就可以利用这个类型。此类型很少用,可以存到20位数字大小。

总结:

在MYSQL里,我们要求越精短越好,因为存储的容量小了,才能从根本上减少IO的扫描,如果在此字段上建主键索引或者建辅助索引,也能有效的减少存储空间,与IO的压力。

mysql修改字段类型为smallint_MYSQL 字段类型之TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT相关推荐

  1. 【mysql】关于mysql中int(M)类型的具体含义以及tinyint/smallint/mediumint/int/bigint的区别是什么?

    之前定义数据库类型一直不理解int(M)的具体含义,M决定的是什么?不同M的值的区别是什么?tinyint / smallint / mediumint / int / bigint这些类型又有什么不 ...

  2. MYSQL中TINYINT SMALLINT MEDIUMINT INT BIGINT的区分

    在MYSQL当中整形数据的存储有四种,分别是TINYINT SMALLINT MEDIUMINT INT BIGINT,它们的区分如下: 类型 存储大小(字节) 最小有符号数 最小无符号数 最大有符号 ...

  3. MySQL 五种整型数据类型的范围与区别 tinyint smallint mediumint int bigint

    之前在论坛上看到一个有意思的问题,如果有一个字段的值超过bigint,会发生什么. 然后就看到有人喷,说0.1秒插入一个值,将bigint设置为无符号,插入到极限需要多久,根本不可能遇到如何如何 . ...

  4. MySQL数据类型详解:tinyint,smallint,mediumint,int,bigint的区别

    前言 每种编程语言都有自己所定义的数据类型,mysql也不例外,平时我们在创建表时,需要根据业务要求,结合存储.索引.字段临界值等条件来为字段定制不一样的类型.下面我们一起学习下mysql的几种常用的 ...

  5. mysql tinyint int mediumint 用哪个好_MYSQL 字段类型之TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT...

    1. tinyint: 只能存储-128到127大小的数字, 不在乎后面的定义,如tinyint(9). 需1字节存储空间. 当加有UNSIGNED后,数字可以从0增加到255大小. dba@loca ...

  6. TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT类型的显示宽度不显示

    最近给学生上课发现一个奇怪的现象 发现int的长度没有显示出来 从官方的解释来看得知 从8.0.17版本开始,TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT ...

  7. TINYINT,SMALLINT,MEDIUMINT,INT,INTEGER,BIGINT;text,longtext,mediumtext,ENUM,SET等字段类型区别

    http://www.path8.net/tn/archives/951 MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述, ...

  8. mysql int mediumint,MySQL数据类型:TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER等字段类型区别...

    好久没有接触后端数据库方面的知识了,一直没搞清楚像int(4) TINYINT(16)中的4和16表示的是什么含义,以及每种数据类型占用的字节数和表示的范围是多少,今天做个总结学习一下. MySQL支 ...

  9. MySQL修改数据表中的字段名

    MySQL修改数据表中的字段名 在一张数据表中只能设置一个唯一名称的字段名.在同一张数据表中,不能出现两个名称完全相同的字段名. 因此,数据库系统可以通过字段名来区分数据表中的不同字段. 在MySQL ...

最新文章

  1. vscode浏览器打开html
  2. 结对开发2(求二维数组的最大子数组和)
  3. Postman安装(汉化Postman)
  4. 主编编辑器怎么把文章转成长图?
  5. 我是社保局工作的,给大家介绍一下准确的“一老一小”保险知识[转载]
  6. 主板后置音频接口图解_图解主板前置音频线接法(一)
  7. 计算机主机内的零件有什么用,ROM和RAM分别是什么?有什么区别?与电脑的什么配件的作用是一? 爱问知识人...
  8. 实验吧 Guess Next Session
  9. 怎么制作书单视频?一款好用的制作软件教程
  10. js html 图片 缓存问题,如何防止浏览器缓存CACHE?将CSS、JS、图片加上参数
  11. Python自动签退脚本
  12. c语言 gps课程设计,完整版GPS定位系统设计.doc
  13. 【前端三剑客三】JavaScript的手术刀剖析第三篇
  14. UE4 如何设置屏幕尺寸和画质
  15. 药物 3D 打印新突破:圣地亚哥大学用机器学习筛选喷墨打印生物墨水,准确率高达 97.22%
  16. 计算机无法写入U盘,解决Mac无法写入U盘问题:无需安装软件,让Mac支持NTFS读写...
  17. Python 转义字符与原字符的使用
  18. 采集中常见HTML标签
  19. 华硕的电脑装linux系统下载,华硕电脑无法安装Ubuntu 10.10以后版本解决
  20. 基于物联网技术的48V蓄电池组远程在线监测解决方案

热门文章

  1. 引领运动耳机新风尚、南卡携手世界冠军郭丹打造冠军品质
  2. macOS上如何通过iCloud Drive便利地同步文稿
  3. TensorFlow入门笔记
  4. 通过Matlab分析语音信号的时频特性
  5. 下载FTP账号密码链接包含@:
  6. 基于旅行商模型的碎纸片拼接复原
  7. 史上最详细的正则表达式教程
  8. assert函数--判断表达式是否正确
  9. 流水线(pipeline)设计详解+实例:为什么要用流水线?流水线的作用和优缺点?流水线深度越大越好吗?什么时候采用流水线?
  10. CF1114D Flood Fill