数据类型
在MySQL数据库中,每一条数据都有其数据类型。MySQL支持的数据类型主要分为3类:数字类型,字符串(字符)类型,日期和时间类型。
2.1 数字类型
MySQL支持所有的ANSI/ISO SQL 92S数字类型。这些类型包括准确数字的数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数字的数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
数据类型 | 取值范围(有符号值) | 取值范围(无符号值) | 说明 | 单位 |
TINYINT | -128~127 | 0~255 | 最小的整数 | 1字节 |
BIT | -128~127 | 0~255 | 最小的整数 | 1字节 |
BOOL | -128~127 | 0~255 | 最小的整数 | 1字节 |
SMALLINT | -2^15(-32,768) ~ 2^15 -1(32,767) | 0~65535 | 小型整数 | 2字节 |
MEDIUMINT | -8388608~8388607 | 0~16777215 | 中型整数 | 3字节 |
INT | -2^31(-2,147,483,648) ~ 2^31-1 (2,147,483,647) | 0~4294967295 | 标准整数 | 4字节 |
BIGINT | -2^63(-9223372036854775808) ~ 2^63-1(9223372036854775807) | 0~18446744073709551615 | 大整数 | 8字节 |
FLOAT | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数 | 8或4字节 |
DOUBLE | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数 | 8字节 |
DECIMAL | 可变 | 可变 | 一般整数 | 自定义长度 |
说明:在创建表时,使用哪种数字类型,应遵循以下原则。
1. 选择最小的可用类型,如果值永远不超过127,则使用TINYINT比INT强。
2. 对于完全都是数字的,可以选择整数类型。
3. 浮点类型用于可能具有小数部分的数,如货物单价,网上购物交付金额等。
2.2 字符串类型
字符串类型可分为3类:普通的文本字符串类型(CHAR和VARCHAR),可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。
(1)普通的文本字符串类型,即CHAR和VARCHAR,CHAR列的长度被固定为创建表所声明的长度,取值在1~255之间;VARCHAR列的值是变长的字符串,取值和CHAR一样。
类型 | 取值范围 | 说明 |
[national] char(M) [binary\ASCII\unicode] | 0~255个字符 | 固定长度为M的字符串,其中M的取值范围为0~255.national关键字指定了应该使用的默认字符集。binary关键字指定了数据是否区分大小写(默认是区分大小写的)。ASCII关键字指定了在该列中使用latin1字符集。unicode关键字指定了使用UCS字符集。 |
char | 0~255个字符 | char(M)类似 |
[national] varchar(M) [binary] | 0~255个字符 | 长度可变,其他和char(M)一样 |
(2)可变类型(TEXT和BLOB)。它们的大小可以改变,TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,如文本,声音和图像等。
类型 | 最大长度(字节数) | 说明 |
TINYBLOB | 2^8-1(255) | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 2^8-1(255) | 短文本字符串 |
BLOB | 2^16-1(65535) | 二进制形式的长文本数据 |
TEXT | 2^16-1(65535) | 长文本数据 |
MEDIUMBLOB | 2^24-1(16777215) | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 2^24-1(16777215) | 中等长度文本数据 |
LONGBLOB | 2^32-1(4294967295) | 二进制形式的极大文本数据 |
LONGTEXT | 2^32-1(4294967295) | 极大文本数据 |
(3)特殊类型(SET和ENUM)
类型 | 最大值 | 说明 |
Enum("value1","value2",...) | 65535 | 该类型的列只可以容纳所列值之一或为NULL |
Set("value1","value2",...) | 64 | 该类型的列可以容纳一组值或为NULL |
说明:
1. BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
2. CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
3. BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
4. 有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
2.3 日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
类型 | 取值范围 | 说明 |
DATE | 1000-01-01~9999-12-31 | 日期值,格式YYYY-MM-DD |
TIME | -838:59:59~838:59:59 | 时间值或持续时间,格式HH:MM:SS |
DATETIME |
1000-01-01 00:00:00~ 9999-12-31 23:59:59 | 混合日期和时间值,格式YYYY-MM-DD HH:MM:SS |
TIMESTAMP |
1970-01-01 00:00:00 2037年的某个时间 | 时间标签,在处理报告时使用显示格式取决于M的值 |
YEAR | 1901-2155 | 年份值,可指定两位数字和四位数字的格式 |
在MySQL中,日期的顺序是按照标准的ANSI SQL格式进行输出的。