MYSQL 字段类型之TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

1. tinyint: 只能存储-128到127大小的数字, 不在乎后面的定义,如tinyint(9). 需1字节存储空间。 当加有UNSIGNED后,数字可以从0增加到255大小。
[email protected] : test 22:36:25> create table ti(id tinyint(9), no tinyint(1));
Query OK, 0 rows affected (0.03 sec)

[email protected] : test 22:36:44> insert into ti values(129,130);
Query OK, 1 row affected, 2 warnings (0.00 sec)

[email protected] : 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这里默认设置为空, 允许超出范围的数据插入, 只给出一个警告。
可以查询下这个表:
[email protected] : test 22:37:39> select * from ti;
+------+------+
| id   | no   |
+------+------+
|  127 |  127 |
+------+------+
1 row in set (0.00 sec)

这个时候是允许插入负数的。
[email protected] : test 22:49:40> insert into ti values(-9,9);
Query OK, 1 row affected (0.00 sec)

[email protected] : test 22:50:06> select * from ti;
+------+------+
| id   | no   |
+------+------+
|  127 |  127 |
|   -9 |    9 |
+------+------+
2 rows in set (0.00 sec)

为了不让数据库产生负数的值, 我们可以修改下这个字段的类型参数:
[email protected] : 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

[email protected] : test 22:50:18> insert into ti values(-9,-9);
Query OK, 1 row affected, 1 warning (0.00 sec)

[email protected] : 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)

[email protected] : 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.

[email protected] : test 22:51:37> insert into ti values(1,258);
Query OK, 1 row affected, 1 warning (0.00 sec)

[email protected] : 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大小。
[email protected] : test 23:00:21> create table ts(id smallint(1), no smallint(10) unsigned);
Query OK, 0 rows affected (0.01 sec)

[email protected] : test 23:01:51> insert into ts values(-32768,32768);
Query OK, 1 row affected (0.00 sec)

[email protected] : 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大小.
[email protected] : test 23:13:10> create table tm(id mediumint(1), no mediumint(10) unsigned);
Query OK, 0 rows affected (0.01 sec)

[email protected] : test 23:13:21> insert into tm values(-8388608,16777216);
Query OK, 1 row affected, 1 warning (0.00 sec)

[email protected] : 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大小.
[email protected] : test 23:14:52> create table tn(id int(1), no int(10) unsigned);
Query OK, 0 rows affected (0.01 sec)

[email protected] : test 23:22:20> insert into tn values(-2147483648,4294967296);
Query OK, 1 row affected, 1 warning (0.00 sec)

[email protected] : 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大小.
[email protected] : test 23:22:28> create table tb(id bigint(1), no bigint(10) unsigned);
Query OK, 0 rows affected (0.01 sec)

[email protected] : test 23:27:40> insert into tb values(-9223372036854775808,18446744073709551616);
Query OK, 1 row affected, 1 warning (0.01 sec)

[email protected] : 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的压力。

  

原文地址:https://www.cnblogs.com/gan-wenjun/p/8260874.html

时间: 2024-07-30 16:22:41

MYSQL 字段类型之TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT的相关文章

mysql tinyint smallint mediumint int bigint

类型 存储所占空间 (无论显示多少位) (单位 字节/bytes) 存储数据范围 最大显示长度 tinyint 1 -128   ~  127                 signed 0     ~   255                 unsigned 3 smaillint 2 -32768 ~ 32767              signed 0       ~  65535            unsigned 5 mediumint 3 -8388608 ~ 83886

(转载)MySQL数据类型:TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER等字段类型区别

(转自http://3y.uu456.com/bp-f088f739376baf1ffc4fad40-1.html) MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型.字符串(字符)类型. 本节首先给出可用类型的一个概 述,并且总结每个 列类型的存储需求,然后提供每个类中的类型性质的更详细的描述.概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允 许格式.下列代码字母用于描述中: M:指出最大的显示尺寸.最大的合法的显示尺寸是 255 .

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

http://www.path8.net/tn/archives/951 MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述.概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式. 由MySQL支持的列类型列在下面.下列代码字母用于描述中: M指出最大的显示尺寸.最大的合法的显示尺寸是 255 .D适用于浮点类型并

MySql 字段类型对应 Java 实体类型

前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.String. 任何 MySql 数字类型都可以被转换为任何一种 Java 数字类型. (当然这样也可能出一些四舍五入,溢出,精度丢失之类的问题). Java基础类型与包装类型 a) 如果数据库字段是允许为空的,使用包装类. 如果不允许为空,使用包装的时候,如果你往数据库插入null值,此时就会抛出异常. 然

MySQL字段类型 约束

目录 MySQL存储引擎 非空约束 字段类型 整形类型INT TINYINT 浮点类型float 字符类型char varchar 日期类型 枚举集合 约束条件 主键 自增 unsigned无符号 zerofill使用0填充 删除记录 MySQL存储引擎 什么是存储引擎? 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.用于根据不同的机制处理不同的数据 提示:InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),行锁定 和 外键.(

六、mysql字段类型选择

1.char类型字段会自动删除字符串后面所带的空格,而varchar不会 2.char比varchar快..... 3.myisam 建议 char类型,memory char跟varchar一样,都作为char类型处理:innodb建议 varchar类型 4.optimize table 清理碎片 text碎片产生实例: create table emp (id tinying(1),content text)engine=myisam; 新建测试表 insert into emp valu

MySql字段类型说明

bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 int 从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字).存储大小为 4 个字节.int 的 SQL-92 同义字为 integer. smal

mysql字段类型

会安装mysql,会几条sql语句,会jdbc,会hibernate配置,以为就会mysql了,最近几天面试被问到mysql的问题,无地自容,系统的学习一下. mysql优化之一,选择合适的而不是最大的数据类型. 整型 类型 占用字节 范围 TINYINT 1 2^8 SMALLINT 2 2^16 MEDIUMINT 3 2^24 INT 4 2^32 BIGINT 8 2^64 浮点型 类型 描述 FLOAT[(M,D)] M表示最大总位数,D表示小数点后最大位数 DOUBLE[(M,D)]

MySQL字段类型详解

MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. 概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式.由MySQL支持的列类型列在下面.下列代码字母用于描述中:M指出最大的显示尺寸.最大的合法的显示尺寸是 255 .D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量.最大可能的值是30,但是应该不大于M