mysql字段长度实例分析

发布时间:2019-08-05编辑:脚本学堂
通过实例学习mysql字段长度的用法与注意要点,填完字段名、数据类型之后就要填写长度,就好比int(4) varchar(16)这里的4和16 ,只能存储4个数字以内的,可我存超过4位的数字的时候依然是可以存的.

mysql数据库中,填完字段名、数据类型之后就要填写长度,就好比int(4) varchar(16)这里的4和16 ,这个M代表什么意思呢?varchar类型的没什么异议,但是这个INT的呢?第一感觉就是代表长度,我只能存储4个数字以内的,可我存超过4位的数字的时候依然是可以存的,所以这样的理解是不完全对的。

其实这个M跟INT能表示的范围没有关系,只要你选择了INT,INT是用4个字节表示,1个字节8位,若表示无符号数时可以表示的范围是 0 ------- 232-1 ,你可以存储任何在这个范围内的数字。但也不是说跟表示完全没关系,mysql中有个zerofll,当建表时选择了0填充之后存储就会有很大的不同,这时如果你选择的是int(4) 你存储12则数据库中存储的是0012,如果填写12345,此时超过了他的指定宽度则按原样存储。

例如:
 

复制代码 代码示例:

//创建一个表  
mysql> create table length_test(id int(4) zerofill,name varchar(16));
Query OK, 0 rows affected (0.06 sec)

//插入一行数据
mysql> insert into length_test values (12,'suchshow');
Query OK, 1 row affected (0.05 sec)

//查询看看
mysql> select * from length_test;
+------+----------+
| id   | name     |
+------+----------+
| 0012 | suchshow |
+------+----------+
1 row in set (0.00 sec)

//再插入一行数据
mysql> insert into length_test values (12345,'suchshow');
Query OK, 1 row affected (0.03 sec)

//显示结果
mysql> select * from length_test;
+-------+----------+
| id    | name     |
+-------+----------+
| 0012 | suchshow |
| 12345 | suchshow |
+-------+----------+
2 rows in set (0.00 sec)

所以说后面的M跟表示的范围是没有影响的,只不过表示显示的宽度,搞懂了之后还是挺有用的。

其中常用的数字型所占用的字节数如下,根据字节数即可算出表示的范围了
 

TINYINT 1 字节 28
SMALLINT 2 个字节 216
MEDIUMINT 3 个字节 224
INT 4 个字节 232
INTEGER 4 个字节
BIGINT 8 个字节
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节
DOUBLE PRECISION 8 个字节
REAL 8 个字节
DECIMAL(M,D) M字节(D+2 , 如果M < D)
NUMERIC(M,D) M字节(D+2 , 如果M < D)

日期和时间类型
列类型 需要的存储量
 

DATE 3 个字节
DATETIME 8 个字节
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节
 

 
串类型
列类型 需要的存储量
 

CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)