三、数据库的数据类型详解

数据类型对于数据库的性能是有一定的影响的,如果一个数值采用的不恰当的数据类型,那么将会导致数据库性能下降。这里先提到一点,我也是刚学,后面具体在分解其中缘由。

Mysql支持SQL的所有类型,分为数值类型,字符串类型,还有日期类型及其他类型。我们先来看看数值类型。数值类型和我们写代码中常用的int,long,float,double差不多。int分了多种类型,其中数值正是根据有无符号来决定的。

比如TINYINT的无符号取值范围就是,2的七次方减1,无符号就是2的8次方减1。

在计算机上有符号类型的,存在正0和负0的表示,如8位的int 第一位为符号位,负零=10000000,正零为00000000,为了约定,在超过01111111,溢出时就会变成负零,所以为了不浪费这种表示,特地约定负0表示一个2的七次方的一个负数。其他16位,24位和32位的道理是一样的。

类型

解释大小范围(有符号)无符号用途
TINYINT最小的int类型1字节,8位(-128,127)(0,255)小整数类型
SMALLINT比较小的int类型2字节,16位(-32768,32767)(0,65535)略小的int类型数值
MEDIUMINT较小的int类型3字节,24位(-8 388 608,8 388 607)(0,16 777 215)较小的int类型
INT或INTEGER一般的int类型4字节,32位(-2 147 483 648,2 147 483 647)(0,4 294 967 295)一般的int类型
BIGINT长整数型8字节,64位(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)长整数
FLOAT浮点数4字节,32位纠结浮点数的大小意义不大纠结浮点数的大小意义不大单精度
DOUBLE双精度浮点8字节,64位纠结浮点数的大小意义不大纠结浮点数的大小意义不大双精度
DECIMAL小数值对DECIMAL(M,D) M>D,为M+2一般的D是不允许大于M的,不同的mysql版本会有所不同,但总之依赖于M和D的大小依赖于M和D的值小数值

这里除了几个int类型我们不太常见以外,还有就是DECIMAL。这是一个专门用来表示小数的特定类型。

一般定义时需要指定M和D。此类型是在MySql5.1的版本中开始引入。M表示这个小数一共可以存储多少个位,包含小数部分。D表示小数部分的位数,是十进制的位数。

如DECIMAL(2,1) 代表就是一个最大值是10,小数部分只有一位的小数,那这个数的最大值就是9.9。NUMERIC与DECIMAL同以,一般会默认转成decimal。通常用来表示货币,此类型要比float和double更为精准。超过存储范围会报错!

  • M是最大位数(精度),范围是1到65。可不指定,默认值是10。
  • D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。

字符类型:

类型解释大小用途
CHAR一般短的字符0-255 bytes定长字符串
VARCHAR一般的较长的字符0-65535 bytes变长字符串
TINYBLOB较小的BOLB字符0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT较小的文本类型0-255 bytes短文本字符串
BLOB一般的BLOB0-65 535 bytes二进制形式的长文本数据
TEXT文本类型0-65 535 bytes长文本数据
MEDIUMBLOB中等的BLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT中等长度的TEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB超长B,LOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT超长TEXT0-4 294 967 295 bytes极大文本数据

文本类型可以分为三类,char,text,BOLB。char和varchar在有些数据库引擎上区别比较大,在mysql的InnoDB中我们一般都采用varchar。两者的区别是,char是固定长度,会造成空间浪费,但是检索速度会比较快,对尾部空格的处理会丢失。现在varchar的优化效率也不错,在InnoDB的数据库引擎中,一般都采用varchar代替char。

TEXT主要用来存储长文本数据,如一大段的商品描述,比较长的公告等等。其最大长度是65535BIT,也就是接近0.06M的存储空间了。

1KB=1024B;1MB=1024KB=1024×1024B。

1B(byte,字节)= 8 bit(见下文);

1KB=1024B= 2^10 B;

BLOB主要是二进制的文本数据类型,如图片音频,视频文件等多媒体文件。

日期和时间类型:

类型解释大小格式范围用途
DATE日期,年月日3个字节2020-05-111000-01-01到9999-12-31只存储日期,年月日,多余的都会被自动截掉
TIME时间,时分秒3个字节14:05:34-838:59:59到838:59:59只存储时间,时分秒,其余会被截掉
YEAR年份1个字节20201901=2155存储年份
DATETIME年月日时分秒8个字节2020-05-11 14:05:341000-01-01 00:00:00到9999-12-31 23:59:59日期时间混合
TIMESTAMP时间戳4个字节2020-05-11 14:05:341970-01-01 00:00:00 到 2037-12-31 23:59:59混合日期二时间戳

这里的DateTime和Java里边的Date类是一致的。这里最主要的两个区别是DATETIME和TIMESTAMP两者的区别。两者范围不同,存储空间不同,索引速度也不相同,TIMESTAMP要不DATETIME快一些,比较轻便。另外DATETIME不会随着时区变化而变化,是绝对时间。还有从表中可以看出,TIMESTAMP的时间范围比较小!

而且一般的数据库函数比如,NOW()获取当前时间的格式都是DATETIME,可以直接获取函数写入当前时间,一般写入数据库时间类型,多用此类型。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zanglengyu

敲碗要饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值