MySQL中的Int-N
关于 MySQL 中的有些类型后面跟一个数字(比如 Int,BigInt, varchar 等),这个数字是什么作用呢?实际上表示的是字段宽度,但是这个宽度在不同的类型上作用也是不同的。主要说下Int
和varchar
中的区别
varchar(N)
在varchar(N)
中,N
表示的就是字符的数量,也就是这个字段可以存储多少个字符,一般来说应该是和编码有关系的。所以指定N
,就表示当前字段只能存储N
个字符,多了就截断了…
Int(N)
一个Int
固定就是4bytes
,不管指定的宽度是多少
整数类型有下面这几种:
- TYNYINT = 1 byte (8bit) (-2^7 ~ 2^7-1)
- SMALLINT = 2 bytes (16 bit) (-2^15 ~ 2^15-1)
- MEDIUMINT = 3 bytes (24 bit) (-2^23 ~ 2^23-1)
- INT = 4 bytes (32 bit) (-2^31 ~ 2^31-1)
- BIGINT = 8 bytes (64 bit) (-2^63 ~ 2^63-1)
每个类型表示的范围是不同,所以在合适的大小选择合适类型还是很有用的,起码可以减少存储空间,创建索引也会更快嘛
所以也就是说,类型定义后面的N
其实不是指定类型的存储大小,也不是存储的值的位数,而是指定的展示的位数。比如说,指定一个字段age
类型为Int(2)
,这个时候我们依旧可以存储进去12346
这样的值,因为int
类型的表示范围比这个值大。但是如果超过了int
的表示范围,就会出现溢出。
一般来说,这个值指定其实没多少用,默认Int
用的是11
,因为int
表示的数的范围最多就是11
位,包括了符号,所以没啥特别的也不用改,改了也没什么卵用,类型定了就会消耗那么多的存储空间,如果需要节约空间,就改改类型好了,比如bool
类型就是用tinyint
结尾
内容是根据网上的内容总结的,文档链接: