1.整数类型
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
数据类型 | 占用空间 | 存储范围 | 无符号范围 |
---|---|---|---|
tinyint | 1字节 | − 128 ∼ 127 -128 \thicksim 127 −128∼127 | 0 ∼ 255 ( 2 8 − 1 ) 0 \thicksim 255 (2^{8}-1) 0∼255(28−1) |
smallint | 2字节 | − 32768 ∼ 32767 -32768 \thicksim 32767 −32768∼32767 | 0 ∼ 65535 ( 2 16 − 1 ) 0 \thicksim 65535 (2^{16}-1) 0∼65535(216−1) |
mediumint | 3字节 | − 8388608 ∼ 8388607 -8388608 \thicksim 8388607 −8388608∼8388607 | 0 ∼ 16777215 ( 2 24 − 1 ) 0 \thicksim 16777215 (2^{24}-1) 0∼16777215(224−1) |
int | 4字节 | − 2147483648 ( − 2 31 ) ∼ 2147483647 ( 2 31 − 1 ) -2147483648 (-2^{31}) \thicksim 2147483647(2^{31}-1) −2147483648(−231)∼2147483647(231−1) | 0 ∼ 4294967295 ( 2 32 − 1 ) 0 \thicksim 4294967295( 2^{32}-1) 0∼4294967295(232−1) |
bigint | 8字节 | − 9223372036854775808 ( − 2 63 ) ∼ 9223372036854775807 ( 2 63 − 1 ) -9223372036854775808 (-2^{63}) \thicksim 9223372036854775807 (2^{63}-1) −9223372036854775808(−263)∼9223372036854775807(263−1) | 0 ∼ 18446744073709551615 ( 2 64 − 1 ) 0 \thicksim 18446744073709551615 (2^{64}-1) 0∼18446744073709551615(264−1) |
2.浮点数类型
浮点数类型:FLOAT、DOUBLE
数据类型 | 类型名称 | 占用空间 | 精度范围 | 存储范围 | 无符号范围 |
---|---|---|---|---|---|
float | 单精度浮点型 | 4字节 | 8位精度 | ( − 3.402823466 × 1 0 38 , − 1.175494351 × 1 0 − 38 ) , 0 , ( 1.175494351 × 1 0 − 38 , 3.402823466351 × 1 0 38 ) (-3.402823466 \times 10^{38},-1.175494351 \times 10^{-38}),\\ 0,\\ (1.175494351 \times 10^{-38},3.402823466351 \times 10^{38}) (−3.402823466×1038,−1.175494351×10−38),0,(1.175494351×10−38,3.402823466351×1038) | 0 , ( 1.175494351 × 1 0 − 38 , 3.402823466 × 1 0 38 ) 0,\\ (1.175494351 \times 10^{-38},3.402823466 \times 10^{38}) 0,(1.175494351×10−38,3.402823466×1038) |
double | 双精度浮点型 | 8字节 | 16位精度 | ( − 1.7976931348623157 × 1 0 308 , − 2.2250738585072014 × 1 0 − 308 ) , 0 , ( 2.2250738585072014 × 1 0 − 308 , 1.7976931348623157 × 1 0 308 ) (-1.7976931348623157 \times 10^{308},-2.2250738585072014 \times 10^{-308}),\\ 0,\\ (2.2250738585072014 \times 10^{-308},1.7976931348623157 \times 10^{308}) (−1.7976931348623157×10308,−2.2250738585072014×10−308),0,(2.2250738585072014×10−308,1.7976931348623157×10308) | 0 , ( 2.2250738585072014 × 1 0 − 308 , 1.7976931348623157 × 1 0 308 ) 0, \\ (2.2250738585072014 \times 10^{-308},1.7976931348623157 \times 10^{308}) 0,(2.2250738585072014×10−308,1.7976931348623157×10308) |
FLOAT(M,D)、DOUBLE(M,D),M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。
例如:设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200.
3.定点数类型
定点数类型:DECIMAL
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d)
M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。
4.日期和时间类型
日期类型:Date、DateTime、TimeStamp、Time、Year
数据类型 | 占用空间 | 存储范围 | 格式 | 用途 |
---|---|---|---|---|
year | 1字节 | 1901/2155 | YYYY | 年份值 |
date | 3字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3字节 | -838:59:59 / 838:59:59 | HH:MM:SS | 时间值或持续时间 |
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:01 UTC 到 2038-01-19 03:14:07 UTC 结束时间是第 2147483647 秒, 北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 03:14:07 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
5.字符串类型
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
数据类型 | 占用空间 | 用途 |
---|---|---|
char | 0 ~ 255 字节 | 定长字符串 |
varchar | 0 ~ 65535 字节 | 变长字符串 |
tinyblob | 0 ~ 255 字节 | 不超过 255 个字符的二进制字符串 |
tinytext | 0 ~ 255 字节 | 短文本字符串 |
blob | 0 ~ 65535 字节 | 二进制形式的长文本数据 |
text | 0 ~ 65535 字节 | 长文本数据 |
mediumblob | 0 ~ 16777215 字节 | 二进制形式的中等长度文本数据 |
mediumtext | 0 ~ 16777215 字节 | 中等长度文本数据 |
longblob | 0 ~ 4294967295 字节 | 二进制形式的长文本数据 |
longtext | 0 ~ 4294967295 字节 | 长文本数据 |
请注意,实际存储空间可能会根据列的定义和字符集而有所不同。例如,对于VARCHAR类型,如果使用多字节字符集(如utf8mb4),实际存储空间会更大
char和varchar:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
- char类型的字符串检索速度要比varchar类型的快。
下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:
(表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误)
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
---|---|---|---|---|
‘’ | ’ ’ | 4个字节 | ‘’ | 1个字节 |
‘ab’ | 'ab ’ | 4个字节 | 'ab ’ | 3个字节 |
‘abcd’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
‘abcdefg’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
varchar和text:
- varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
- text类型不能有默认值。
- varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
二进制数据(_Blob)
- _BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
- _BLOB存储的数据只能整体读出。
- _TEXT可以指定字符集,_BLO不用指定字符集。
6.枚举类型
ENUM(‘value1’,‘value2’,…)
枚举类型。只能有一个值的字符串,从值列’value1’,‘value2’,…,NULL中或特殊 ''错误值中选出。ENUM列最多可以有65,535个截然不同的值。ENUM值在内部用整数表示。
例如,定义为ENUM的列(‘one’,‘two’,‘three’)可以有下面所示任何值。还显示了每个值的索引:
- NULL ,索引:NULL
- ‘’ ,索引:0
- ‘one’ ,索引:1
- ‘two’ ,索引:2
- ‘three’ ,索引:3
7.集合类型
SET(‘value1’,‘value2’,…)
一个SET。字符串对象可以有零个或多个值,每个值必须来自列值’value1’,‘value2’,…SET列最多可以有64个成员。SET值在内部用整数表示。
例如,指定为SET(‘one’, ‘two’) NOT NULL的列可以有下面的任何值:
- ‘’
- ‘one’
- ‘two’
- ‘one,two’
数据类型的属性
- NULL 数据列可包含NULL值
- NOT NULL 数据列不允许包含NULL值
- DEFAULT 默认值
- PRIMARY KEY 主键
- AUTO_INCREMENT 自动递增,适用于整数类型
- UNSIGNED 无符号
- CHARACTER SET name 指定一个字符集