MySQL数据类型介绍


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 类型,可存储的最大长度不同,可根据实际情况选择。

上一篇 下一篇

评论

登录后可发表评论