MySQL列类型详解

  • 数值型
  • 整型
  • 浮点型/定点型
  • 字符型
  • 日期时间类型(插入时需加引号)



   在MySQL中,所谓建表就是声明列的过程。数据是以文件的形式放在硬盘上,也有放在内存里的,不同的列所占的空间不同。选择列的原则是够用且不浪费。

数值型
整型

   整型包括5种列类型:tinyint、smallint、mediumint、int、bigint。


占据空间和存储范围

类型

字节


无符号

有符号

tinyint

1

8

0~(2^8-1)

-2^7~ +(2^7-1)

smallint

2

16

0~(2^16-1)

-2^15~ +(2^15-1)

mediumint

3

24

0~(2^24-1)

-2^23~ +(2^23-1)

int

4

32

0~(2^32-1)

-2^31~ +(2^31-1)

bigint

8

64

0~(2^64-1)

-2^63~ +(2^63-1)

   以tinyint为例,在硬盘上占据1个字节(8位)的空间,无符号存储范围为2^8-1,如果表示负数,可以用最高位来标志符号位。 -2^7~+(2^7-1)(只有后7位表示绝对值,最高位表示的是符号位)(补码)
   tinyint默认是有符号的,存储是-2^7~+(2^7-1)
   整数列的可选属性tinyint(M) unsigned zerofill;M:宽度(在0填充的时候才有意义)、unsigned:无符号类型(非负)、zerofill:0填充(默认无符号);如果某列定义为zerofill,默认就是unsigned。

浮点型/定点型

   浮点型:float(M,D)
   定点型:decimal(M,D)
   M:精度(总位数,不包含小数点),D:标度(小数位),float(6,2)为例,能存储-9999.99~9999.99范围内的数字,可取值范围与整形不同,比较特殊。float(4,2)取值范围:-99.99~99.99,float(4,2) unsigned 取值范围:0.00~99.99。

字符型


占据空间和存储范围

类型

说明

典型声明方式

范围

char

定长字符串

gender char(1)

char(M),M取值范围0~2^8-1

varchar

变长字符串

email varchar(20)

varchar(M),M取值范围0~2^16-1,约2W~6W字符受字符集影响

text++

文本串

content text

约2W~6W字符受字符集影响

    char定长,char(M),M代表宽度,即可容纳的字符数。
   varchar变长,varchar(M),M代表宽度,即可容纳的字符数。
   区别:
   空间利用效率上:
   char定长M个字符,如果存的小于M个字符,实占M个字符,若不够M个字符内部用空格补齐,读时空格丢失;varchar:变长,M个字符,存的小于M个字符,设为N,N<=M,实占N个字符。
   运算速度上:定长速度快些。
   char与varchar的选择综合空间利用效率和运算速度两方面考虑。

日期时间类型(插入时需加引号)


占据空间和存储范围

类型

范围

year(年)

1901~2155,如果输入两位,'00~69’表示2000~2069年,'70~00’表示1970~1999年

date(年-月-日)

1000-01-01~9999-12-31(公元)

time(时间点)

-838:59:59~+838:59:59

datetime(年-月-日 时:分:秒)

1000-01-01 00:00:00~9999-12-31 23:59:59(公元)

   很少用日期时间类型来表示一个需要精确到秒的列,因为虽然日期时间类型能精确到秒而且方便查看,但计算不便。可以用时间戳来表示一个精确到秒的列,时间戳用int来存储,是1970-01-01 00:00:00到当前的秒数。
   比如,一般存注册时间商品发布时间等,并不是用datetime存储,而是时间戳,因为datetime虽然直观,但计算不便,而用int存储时间戳,方便计算,对于显示来说,也方便格式化。