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存储时间戳,方便计算,对于显示来说,也方便格式化。

发布了59 篇原创文章 · 获赞 20 · 访问量 3623

猜你喜欢

转载自blog.csdn.net/qq_34896730/article/details/105169102