Mysql字段长度摘记

昨天建表时发现了一个以前都没注意的问题,就是长度这一栏该如何填?

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

 

      其实这个MINT能表示的范围没有关系,只要你选择了INTINT是用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 <= M1 <= 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',...) 12348个字节取决于集合成员的数量(最多64个成员)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值