关于 MySQL 中的有些类型后面跟一个数字(比如 Int,BigInt, varchar 等),这个数字是什么作用呢?实际上表示的是字段宽度,但是这个宽度在不同的类型上作用也是不同的。主要说下Intvarchar中的区别

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

结尾

内容是根据网上的内容总结的,文档链接: