欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL—MySQL数据库支持的数据类型_MySQL

程序员文章站 2022-05-19 08:34:48
...
在数据库中,数据类型对于设计数据库者来说十分重要,记得在一次数据库大会上,某前辈说了这么一句话:“如果是我面试DBA,我第一个问题就是关于tinyint、smallint、mediumint、int、bigint的区别,如果这些不能详细解释,后面不管他表现的多好,我不会考虑”,从这里可以理解掉MySQL的数据类型是多么重要,很多人特别是开发人员往往不会关注这方面,从理解上大家会任务数据库对内存等方面要求很高,这些数据类型并不是很重要,其实他忽略了一个关键的因素,磁盘IO,如果数据类型设置的不合理,会占用很大的磁盘空间,会给数据带来IO上得瓶颈,下面我们就详细的学习下MySQL支持的数据类型

1:数值类型

整数类型

字节

最小值

最大值

TINYINT

1

有符号-128

无符号0

有符号127

无符号255

SMLLINT

2

有符号-32768

无符号0

有符号32767

无符号65535

MEDIUMINT

3

有符号-8388608

无符号0

有符号8388607

无符号16777215

INT、INTEGER

4

有符号-2147483748

无符号0

有符号2147483747

无符号4294967295

BIGINT

8

有符号-9223372036854775808

无符号0

有符号9223372036854775807

无符号18446744073709551615

浮点数类型

字节

最小值

最大值

FLOAT

4

+_1.17549435-38

+_3.402823466E+38

DOUBLE

8

+_2.225073858507204E-308

+_1.7976931348623157E+308

在整数类型着中,按照取值范围和存储方式不同,分为tinyint、smallint、 mediumint、int、bigint这5个类型,如果超出类型范围的操纵,会发生“out of range”错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际请客确定其取值范围,最后根据确定的结果慎重选择数据类型

所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,他的取值范围是正常值的下限取0,上限取原值的2倍

另外,整数类型还有一个属性,AUTO_IMCREMENT。在需要产生唯一标示符或顺序值时,可利用此属性,这个属性只用于整数类型,AUTO_INCREMENT值一般从1开始,每行加1

2:日期时间类型

MySQL中友很多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,下表列出5.0所支持的日期和时间类型

日期和时间类型

字节

最小值

最大值

DATE

4

1000-01-01

9999-12-31

DATETIME

8

1000-01-01 00:00:00

9999-12-31 23:59:59

TIMESTAMP

4

19700101080001

2038年的某个时刻

TIME

3

-838:59:59

838:59:59

YEAR

1

1901

2155

上述类型,除了TIMESTAMP外都容易理解,下面我们就TIMESTAMP和DATETIME进行对比

1:TIMESTAMP支持的时间范围小,其取值范围从19700101080001到2038年的某个时刻,而DATETIME是从1000-01-01 00:00:00到9999-12-31 23:59:59,范围更大

2:表中的第一个TIMESTAMP列自动设置为系统时间,如果在一个TIMESTAMP中插入NULL,则该列赋值将自动设置为当前的日期和时间,再插入或者更新一行但不明确给TIMESTAMP列赋值时也会子偶那个设置该列的当前的时间和日期,当插入的值超出取值范围,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补

3:TIMESTAMP的插入和查询都受当地时区的影响,更能反应出实际的日期。而DATETIME则只能反应出插入时当地的时区,其他时区的人查看数据必然会受到影响

4:TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大

3:字符串类型

MySQL提供了很多种对字符数据的存储类型,下表就详细进行了对比

字符串类型

字节

描述及存储需求

CHAR(M)

M

M为0~255之间的整数

VARCHAR(M)

M为0~65535之间的整数,值的长度+1个字节

TINYBLOB

允许长度0~255字节,值的长度+1个字节

BLOB

允许长度0~65535字节,值的长度+2个字节

MEDIUMBLOB

允许长度0~167772150,值的长度+3个字节

LONGBLOB

允许长度0~4294967395,值的长度+4个字节

TINYTEXT

允许长度0~255,值的长度+2个字节

TEXT

允许长度0~65535字节,值的长度+2个字节

MEDIUMTEXT

允许长度0~167772150,值的长度+3个字节

LONGTEXT

允许长度0~4294967395,值的长度+4个字节

VARBINARY( M)

允许长度0~M个字节的变长字符串,值的长度+1个字节

BINARY(M)

M

允许长度0~M个字节的变长字符串

CHAR和VARCHAR类型
CHAR和VARCHAR很类似,都用来保存MySQL中较短的字符串,二者的主要区别在于存储方式的不同,CHAR列的长度固定为创建表时的长度,长度可以为从0~255任何值。而VARCHAR列中的值为可变长字符串,长度可以为指定的0~255或者65535之间的值。在检索的时候,CHAR列删除了尾部的空格,而VARCHAR保留了这些空格。会造成索引存储大小上的变化,所以在设置这个类型的时候一定要慎重,充分分析现有业务
BINARY和VARBINARY类型
BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制串而不包含非二进制字符串。
TEXT和BOLB类型
这2种主要用于存储一些大字段类似于图片等,慎用……