MySQL的数据类型主要分为以下几大类:
- 数值类型
- 整型:tinyint、smallint、mediumint、int、bigint
- 浮点型:float、double
- 字符类型
- 文本:char、varchar、text
- 二进制:binary、blob
- 时间类型:date、time、datetime、year、timestamp
- 复合类型:enum、set
一、数值类型
1>、整型
类 型 |
字 节 |
范围(signed) |
范围(unsigned) |
tinyint |
1 |
-128 ~ 127 |
0~255 |
smallint |
2 |
-32267 ~ 32267 |
0~65535 |
mediumint |
3 |
-8388608 ~ 8388608 |
0~16777215 |
int |
4 |
-2147483648 ~ 2147483647 |
0~4294967295 |
bigint |
8 |
-9233372036854775808 ~ 9223372036854775807 |
18446744073709551615 |
2>、浮点型
类 型 |
字 节 |
范围(signed) |
范围(unsigned) |
float |
4 |
-3.402823466E+38 ~ 1.175494351E-38 |
0 ~ 3.402823466351E+38) |
double |
8 |
-1.7976931348623157E+308 ~ 2.2250738585072014E-308 |
0 ~ 1.7976931348623157E+308) |
decimal(M,D) |
m + 2 |
M是数字的最大长度, 取值范围1~65,默认值为10。 D是小数点位数,取值范围为0~30,不得超过M的长度 |
|
说明:
1>四舍五入:对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值,再插入它。比如:decimal(5,2)类型的值为123.456,会自动截断为123.46。
2>取值范围说明 float(5,2):表示数值最大长度为5位,不包括小数点,其中3位为整数,2位为小数。如果超过取值范围,则取其表示的最大值。如:1234.56,整数部份超过了3位,MySQL会取整个数的最大值999.99。
二、字符串类型
类 型 |
字符长度取值范围 |
说明 |
char |
0 ~ 255 |
定长字符串,如:lating1编码,char(10),占10个字节 |
varchar |
0 ~ 255 |
可变长度字符串,如:varchar(10),根据实际存放的字符串长度计算存储空间 |
text |
0 ~ 65535 |
长文本字符串 |
blob |
0 ~ 65535 |
长文本二进制字符串 |
tinytext |
0 ~ 255 |
短长度文本字符串 |
tinyblob |
0 ~ 255 |
短长度二进制字符串 |
mediumtext |
0 ~ 16777215 |
中长度文本字符串 |
mediumblob |
0 ~ 16777215 |
中长度二进制字符串 |
longtext |
0 ~ 4294967295 |
极大文本字符串 |
longblob |
0 ~ 4294967295 |
极大二进制字符串 |
binary(M) |
0 ~ M |
保存定长二进制字符串,注意它保存的是字节而不是字符,没有字符集限制,区分大小写,不足长度用\0填充 |
varbinary(M) |
0 ~ M |
保存变长的二进制字符串,同binary保存的是字节,没有字符集限制,区分大小写,不足后面不会补\0 |
三、日期和时间类型
类 型 |
取值范围 |
格式 |
说明 |
date |
1000-01-01 ~ 9999-12-31 |
yyyy-MM-dd、yyyy/MM/dd、yyyyMMdd,如:2016-07-03、2016/07/03、20160703 |
存储年月日 |
time |
-838:59:59 ~ 838:59:59 |
HH:mm:ss,HHmmss,如:08:24:53,082453 |
存储时分秒 |
year |
1901 ~ 2155 |
yyyy,如:2016 |
存储4位数的年份,不在取值范围用0表示 |
datetime |
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
yyyy-MM-dd HH:mm:ss,yyyy/MM/dd HH:mm:ss |
date和time类型的组合 |
timestamp |
1970-01-01 00:00:00 ~ 2037某时 |
yyyy-MM-dd HH:mm:ss |
date和time类型的组合,如果没有对该类型的字段赋值或赋值为null,默认值为当前时间 |
四、复合类型
类 型 |
语法 |
说明 |
enum |
enum(‘a’,’b’) |
一次只能存取其中的一个值,如果不是其中的某一个值,mysql会插入一个空字符串。适合单选值,比如性别 |
set |
set(‘a’,’b’,’c’) |
可以存取其中的多个值,多个字符之间用逗号分隔,最多不能超过64个。如果不是其中的值,mysql会插入一个空字符串。适合多选,比如个人爱好 |
create table mixtab (
radiovalue enum('a','b','c'), checkvalue set('a','b','c','d')
);
mysql> insert into mixtab values ('b', 'a,b,c'); # success
mysql> insert into mixtab values ('d', 'a,b'); # error,'d'不在enum范围内
mysql> insert into mixtab values ('d', 'ab'); # error,'ab'没用逗号分隔
注意:数值类型默认都是signed(有符号),在创建字段的时候可以显示指定unsigned或signed。如:create table user(age int unsigned);