数据存储:MySQL之理清数据类型

it2024-04-17  54

Mysql数据类型

时间类型:

date:3字节-日期。格式:2020-10-01

time:3字节-时间。格式:08:00:00

datetime:8字节-日期时间。格式:2020-10-01 08:00:00

timestamp:4字节-时间戳。2020-10-01 08:00:00

year:1字节-年份。2020

 

整数值类型:

tinyint:1字节。有符号范围(-128~127),无符号范围(0~255)

smallint:2字节。有符号范围(-32768~32767),无符号范围(0~65535)

mediumint:3字节。有符号范围(-8388608~8388607),无符号范围(0~16777215)

int:4字节。有符号范围(-2147483648~2147483647),无符号范围(0~4294967295)

bigint:8字节。有符号范围(-9 223 372 036 854 775 808~9 223 372 036 854 775 807),无符号范围(0~18 446 744 073 709 551 615)

无符号使用UNSIGNED修饰,有符号和无符号类型使用相同的存储空间,并具有相同的性能,因此可以根据实际情况选择合适的类型。

Mysql可以为整数类型指定宽度,例如:int(8),它不会限制值的合法范围,只是规定了显示字符的个数,对于存储和计算来说,int(1)和int(8)是相同的。

创建一个表weight内有两个字段id和weight。将weight字段限制为宽度为2。再设置为自动填充0,会得到如下结果:

 

浮点数类型:

float(m, d):4字节。单精度浮点型,m为总位数,d为小数点右侧位数。

double(m, d):8字节。双精度浮点型,m为总位数,d为小数点右侧位数。

decimal(m, d):m+2字节。m为总位数,d为小数点右侧位数。不仅可以存储小数部分,也支持存储比BIGINT还大的整数,decimal类型允许最多65个数字。

CPU不支持对decimal的直接计算,所以Mysql服务器自身实现了decimal的高精度计算。相对而言,CPU直接支持原生浮点计算,所以浮点运算明显更快。

浮点类型存储同样范围的值时,通常会消耗比decimal更少的空间,和整数类型一样,能选择的只是存储类型,Mysql使用double作为内部浮点计算的类型。

因为需要额外的空间和计算开销,所以应该尽量只是对小数进行精确计算时,才使用decimal-存储财务数据等。但在数据量比较大的时候,可以考虑使用bigint代替decimal,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。可以同时避免浮点存储计算不精确和decimal精确计算代价高的问题。

 

字符串类型:

char(n):固定长度,最多255个字符。

varchar(n):可变长度,最多65535个字符。

tinytext:可变长度,最多255个字节。

text:可变长度,最多65535个字节。

mediumtext:可变长度,最多2的24次方-1个字节。

longtext:可变长度,最多2的32次方-1个字节。

这里描述char与varchar长度的时候使用的是字符,因为当存放中文字符的时候,1个字符可以占用3个字节。意味着varchar可以存储65535个英文字符,也可以存储65535个中文字符。

关于字符串类型的固定长度与可变长度。以char和varchar为例:定义char(10),不论你存储的数据是否达到了10个字符,都会按照10个字符的长度用空格填补进行存储,所以尾部的空格会被认为是填充而丢弃。而varchar(10)是存放实际字符串加上1个字节以记录字符串的长度,所以可能比10个字节要短。

最新回复(0)