在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M;
后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插入数据库中的值的字符长度不能大于M,例如,int(4),想要插入1234,1234的字符长度是4,就正好可以插入数据库,12341就不行,因为是5个字符长度,这也都是道听途说,自己从来没有验证过;
如今,由于面试中经常会被问到有关数据库方面的知识,今天也想着深入了解下这个M代表的含义(上述两个理解都是错误的)。
首先,我们创建一个数据表test:
mysql> CREATE TABLE test( -> id1 int(1), -> id2 tinyint(1) ->);
我们给id1定义为int,并设置字符长度为1,id2定义为tinyint,也设置字符长度为1;
然后分别插入值127,127,结果发现,两者都插入到了数据表中:
mysql> INSERT INTO test(id1,id2) values(127,127);//运行成功
结果是插入成功的,从此次测试已经可以知道,我之前的想法都是错误的,接下来我们再做一个实验,插入数据128,128,即id=128,id2=128:
mysql> INSERT INTO test(id1,id2) values(128,128);//运行失败:ERROR 1264 (22003):Out of range value for column 'id2' at row 1
出错了,int类型的id1插入成功了,tinyint类型的id2提示超出了范围,这是为什么呢?
首先,我们先要了解一个基础知识点,就是下面这张表:(摘自W3C教程)
上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的字节大小都是固定的。例如,之前设置的int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换句话说就是,你可以存入有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何一个数。int(1)和int(11)占用的是4个字节,可以存入上述这些数,tinyint(1)和tinyint(4)占用的是1个字节,可以存入从-128到127的数,这也是为什么之前的一次试验,int(1)插入128成功,而tinyint(1)插入128却提示超出长度。
那么,这个M值到底代表什么意思呢?
到这里,我们已经可以发现,M值即使设置为1,它也可以存入字符长度大于1的值,那么,如果存入的字符长度小于1会怎么样?我们来试一试:
先将id1的类型更改为int(2),然后插入数据id1=1:
mysql> ALTER TABLE test Modify id1 int(2); mysql> INSERT INTO test(id1) values(1);//运行成功,说明值1已经插入到test表中
我们查询一下表中的数据,看看结果具体如何:
mysql> SELECT * FROM test; +------+ | id1 | +------+ | 1 | +------+
接下来,我们再修改一下id1的填充数据类型zerofill(表示用0填充),这里先知道如何操作即可,我们再从结果得出结论:
mysql> ALTER TABLE test MODIFY id1 int(2) zerofill; mysql> SELECT * FROM test;
+------+ | id1 | +------+ | 01 | +------+
现在是不是有些清楚了。我们设置的M值是2,没有设置zerofill用0填充时,对于操作没有任何影响,而设置了zerofill后,我们可以清楚地看到值1字符数不足M值,左前位置补0。我们也可以将M值设置成别的大小进行多次测试,这里就不进行测试了。
需要强调的是,不同的数据类型中的M值意义是不一样的,我们这里仅讨论整型中的M值。
从上面我们可以得到如下的结论:
1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;
2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;
3、当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。
总结:int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。这个东西基本没有意义,除非你对字段指定zerofill。
所以我们在设计mysql数据库时,建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。
参考博客:http://www.cnblogs.com/stringzero/p/5707467.ht
相关推荐
在MySQL中,`INT` 和 `TINYINT` 是两种常见的整数类型,它们主要用于存储整数值。这两种类型的差异主要体现在存储空间的需求、能够表示的数值范围以及显示宽度等方面。 #### 二、INT 类型详解 1. **存储空间**:`...
MySQL中的整数类型主要包括四种:`tinyint`、`smallint`、`int`和`bigint`,它们各自有不同的取值范围和存储需求,适用于不同的应用场景。 1. `tinyint`: `tinyint`是一种非常小的整数类型,主要用于存储只需要1...
整型是 MySQL 中最基本的数值型数据类型,包括 Tinyint、Smallint、Mediumint、Int、Integer 和 Bigint 六种类型。每种类型都有其特定的字节范围和无符号/有符号表示方式。 1. Tinyint: Tinyint 是 MySQL 中最小的...
在MySQL数据库中,整数类型是用于存储数值数据的关键元素,包括`INT`在内的各种整数类型都有着不同的存储范围和用途。本篇文章将深入讲解`INT`类型的最大值及其背后的原理。 首先,我们要理解计算机存储的基本单位...
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。 表的字段类型 数值类型 表的字段类型 日期和时间类型 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有...
在MySQL中,数值类型是用于存储整数、浮点数以及精确数值的重要类型。以下是对这些数值类型的详细说明: 1. **TINYINT**: TINYINT占用1个字节(8位),可以存储从-128到127的有符号整数,或者从0到255的无符号...
在 Java 中,对应 MySQL 的数值类型可以使用基本数据类型,例如 int、long、float 和 double 等。对应日期时间类型可以使用 java.util.Date 和 java.sql.Date 等。对应字符串类型可以使用 String 等。 理解 MySQL ...
对于整型,MySQL 提供了 Tinyint、Smallint、Mediumint、Int(或 Integer)、Bigint 这些类型,它们分别有不同的存储字节和数值范围。在定义整型时,可以选择是否为无符号,无符号类型能提供更大的数值范围,但不...
在 MySql 中,整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等。这些数据类型都可以用来存储整数值,但它们的长度和取值范围不同。例如,TINYINT 可以存储从 0 到 255 的数,而 INT 可以存储从 0 到 ...
本文将详细介绍MySQL中的数据类型,主要包括数值类型、字符串类型和时间日期类型。 1、数值类型 MySQL 中的数值类型分为整数类型、定点数和浮点数。 - 整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER...
整型数据类型包括 tinyint、smallint、mediumint、int 和 bigint 等。每种整型都有其对应的有符号和无符号类型。 * tinyint:有符号范围 (-128 ~ 127),无符号范围 (0 ~ 255) * smallint:有符号范围 (-32768 ~ ...
首先,`int`数据类型的存储空间是固定的,无论`M`的值是多少,`int`在MySQL中始终占用4个字节(32位),这意味着它的取值范围也是固定的:-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)。如果使用`unsigned`...
MySQL的数据类型大致可以分为四类:数值类型、字符串类型、日期/时间类型以及特殊类型。 ##### 1. 数值类型 - **整型**: 包括`TINYINT`、`SMALLINT`、`MEDIUMINT`、`INT`(或`INTEGER`)和`BIGINT`。这些类型用于...
数值类型是 MySQL 中最基本的数据类型。它可以分为整数类型和浮点数类型。整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。不同的整数类型占用的字节数...
- 整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,它们分别使用8、16、24、32和64位存储。 - TINYINT有UNSIGNED选项,无符号整数的取值范围扩大,例如TINYINT UNSIGNED范围为0到255,而SIGNED范围为-128...
JDBC数据类型与数据库字段对应表——mysql篇 数值型 整型 JDBC tinyint java.lang.Integer smallint mediumint java.lang.Long int bigint java.math.BigInteger
MySQL 支持的各种数据类型可以分为数值类型、字符串类型、日期和时间类型、二进制类型和枚举和集合类型等。 数值类型 MySQL 支持的数值类型包括整数类型、浮点数类型和定点数类型。 * 整数类型:包括 TINYINT、...
MySQL中数据类型的选择对于数据库设计至关重要,它直接关系到数据存储的有效性和查询的效率。MySQL支持多种数据类型,可以分为几大类:数值型、日期时间型、字符型以及其他数据类型等。 数值型数据类型主要包括:...