在MySQL数据库中,每一条数据都有其数据类型。MySQL支持的数据类型,主要分成3类:数字类型、字符串(字符)类型、日期和时间类型。
1、数字类型
MySQL支持所有的ANSI/ISO SQL 92数字类型。这些类型包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT),还包括近似数字的数据类型(FLOAT、REAL和DOUBLE PRECISION)。其中的关键词INT是INTEGER的同义词,关键词DEC是DECIMAL的同义词。
整数数据类型:
数据类型 | 说明 |
---|---|
TINYINT | 最小的整数 |
BIT | 最小的整数 |
BOOL | 最小的整数 |
SMALLINT | 小型整型 |
MEDIUMINT | 中型整型 |
INT | 标准整型 |
BIGINT | 大型整型 |
浮点数据类型:
数据类型 | 说明 |
---|---|
FLOAT | 单精度浮点数 |
DOUBLE | 双精度浮点数 |
DECIMAL | 一般精度浮点数 |
在创建表时,使用哪种数字类型,应遵循以下原则。
(1)选择最小的可用类型,如果值永远不超过127,则使用TINYINT比INT强。
(2)对于完全都是数字的,可以选择整数类型。
(3)浮点类型用于可能具有小数部分的数,如货物单价、网上购物交付金额等。
2、字符串类型
字符串类型可以分为3类:普通的文本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。它们之间都有一定的区别,取值的范围不同,应用的地方也不同。
(1)普通的文本字符串类型,即CHAR和VARCHAR类型,CHAR列的长度被固定为创建表所声明的长度,取值在1~255之间;VARCHAR列的值是变长的字符串,取值和CHAR一样。
数据类型 | 说明 |
---|---|
[national] char(M) [binary|ASCII|unicode] | 固定长度为M的字符串,其中M的取值范围为0~255。National关键字指定了应该使用的默认字符集。Binary关键字指定了数据是否区分大小写(默认是区分大小写的)。ASCII关键字指定了在改列中使用latin1字符集。Unicode关键字指定了使用UCS字符集 |
[national] varchar(M) [binary] | 长度可变,其他和char(M)类似 |
(2)可变类型(TEXT和BLOB)。它们的大小可以变化,TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,如文本、声音和图像等。
数据类型 | 说明 |
---|---|
TINYBLOB | 小BLOB字段 |
TINYTEXT | 小TEXT字段 |
BLOB | 常规BLOB字段 |
TEXT | 常规TEXT字段 |
MEDIUMBLOB | 中型BLOB字段 |
MEDIUMTEXT | 中型TEXT字段 |
LONGBLOB | 长BLOB字段 |
LONGTEXT | 长TEXT字段 |
(3)特殊类型(SET和ENUM)。
数据类型 | 说明 |
---|---|
ENUM(value1,value2,...) | 该类型的列只可以容纳所列值之一或为NULL |
SET(value1,value2,...) | 该类型的列可以容纳一组值或为NULL |
创建表时,使用字符串类型时应遵循以下原则。
(1)从速度方面考虑,要选择固定长度的列,可以使用CHAR类型。
(2)要节省空间,使用动态的列,可以使用VARCHAR类型。
(3)要将列中的内容限制在一种选择,可以使用ENUM类型。
(4)允许在一个列中有多于一个的条目,可以使用SET类型。
(5)如果要搜索的内容不区分大小写,可以使用TEXT类型。
(6)如果要搜索的内容要区分大小写,可以使用BLOB类型。
3、日期和时间数据类型
日期和时间类型包括:DATETIME、DATE、TIMESTAMP、TIME和YEAR。其中的每种类型都有其取值的范围,如赋予它一个不合法的值,将会被“0”代替。
数据类型 | 说明 |
---|---|
DATE | 日期,格式YYYY-MM-DD |
TIME | 时间,格式HH:MM:SS |
DATETIME | 日期和时间,格式YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 时间标签,在处理报告时使用显示格式取决于M的值,格式YYYY-MM-DD HH:MM:SS |
YEAR | 年份可指定两位数字和四位数字的格式 |
DATETIME与TIMESTAMP有什么不同?
相同点:TIMESTAMP列的显示格式与DATETIME列相同。显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。
不同点:
TIMESTAMP:4个字节储存,时间范围:1970-01-01 08:00:01 ~ 2038-01-19 11:14:07
值以UTC格式保存,涉及时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
DATETIME:8个字节储存,时间范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
实际格式储存,与时区无关。
存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。