MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
【数值类型】
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面显示了需要的每个整数类型的存储和范围。
TINYINT(小整数值)
大小:1 字节
范围(有符号):(-128,127)
范围(无符号):(0,255):
SMALLINT(大整数值)
大小:2 字节
范围(有符号):(-32 768,32 767)
范围(无符号):(0,65 535)
MEDIUMINT(大整数值)
大小:3 字节
范围(有符号):(-8 388 608,8 388 607)
范围(无符号):(0,16 777 215)
INT或INTEGER(大整数值)
大小:4 字节
范围(有符号):(-2 147 483 648,2 147 483 647)
范围(无符号):(0,4 294 967 295)
BIGINT(极大整数值)
大小:8 字节
范围(有符号):(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)
范围(无符号):(0,18 446 744 073 709 551 615)
FLOAT(单精度-浮点数值)
大小:4 字节
范围(有符号):(-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)
DOUBLE(双精度-浮点数值)
大小:8 字节
范围(有符号):(-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)
DECIMAL(小数值)
大小:对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
范围(有符号):依赖于M和D的值
范围(无符号):依赖于M和D的值
取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。
【日期和时间类型】
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
DATE(日期值)
大小(字节):3
范围:1000-01-01/9999-12-31
格式:YYYY-MM-DD
TIME(时间值或持续时间)
大小(字节):3
范围:'-838:59:59'/'838:59:59'
格式:HH:MM:SS
YEAR(年份值)
大小(字节):1
范围:1901/2155
格式:YYYY
DATETIME(混合日期和时间值)
大小(字节):8
范围:1000-01-01 00:00:00/9999-12-31 23:59:59
格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP(混合日期和时间值,时间戳)
大小(字节):4
范围:1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
格式:YYYYMMDD HHMMSS
【字符串类型】
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
CHAR
大小:0-255字节
用途:定长字符串
VARCHAR
大小:0-65535 字节
用途:变长字符串
TINYBLOB
大小:0-255字节
用途:不超过 255 个字符的二进制字符串
TINYTEXT
大小:0-255字节
用途:短文本字符串
BLOB
大小:0-65 535字节
用途:二进制形式的长文本数据
TEXT
大小:0-65 535字节
用途:长文本数据
MEDIUMBLOB
大小:0-16 777 215字节
用途:二进制形式的中等长度文本数据
MEDIUMTEXT
大小:0-16 777 215字节
用途:中等长度文本数据
LONGBLOB
大小:0-4 294 967 295字节
用途:二进制形式的极大文本数据
LONGTEXT
大小:0-4 294 967 295字节
用途:极大文本数据
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。
varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
登录后可发表评论