创建mysql数据表时,字段的int类型长度问题
填完字段名、数据类型之后就要填写长度,就好⽐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 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节mysql创建表数据类型
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 VARCHAR(M) L+1 字节, 在此L 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个成员)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论