Mysql的数据类型主要包括以下五大类:
整数类型:BIT、BOOL、TINYINT、SMALLINT、MEDIUMINT、 INT、 BIGINT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUM BLOB、LONG BLOB二进制
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
A.数字类型
注意点 1.如果设置字段为unsigned,那么范围翻倍,如tinyint 的取值范围将会变成0~256
2.整型设置的长度M,并不是指数据类型长度,而是现实长度 如 int(5)=1 则会显示00001,若大于99999,则前面不补0
3.decimal一般用来表示货币,不存在浮点数计算四舍五入的问题 定义为unsignned后不会翻倍,只会砍掉负数部分 M默认10的取值范围1~65,D默认0为0~30且不超过m
4.浮点类型的unsigned,同样不会扩大范围,浮点类型的取值范围M:1~155,D:0~30,
5.bit类型存放位域值,M取值范围1~64默认1
6.zerofill会填充除了bit以为的所有的数值为0,并把列转换为unsigned
MySQL数据类型 | 取值范围 | 存储空间 |
tinyint(m) | 范围(-128~127) | 1个字节 |
smallint(m) | 范围(-32768~32767) | 2个字节 |
mediumint(m) | 范围(-8388608~8388607) | 3个字节 |
int(m) | 范围(-2147483648~2147483647) | 4个字节 |
bigint(m) | 范围(+-9.22*10的18次方) | 8个字节 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 | 4 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 | 8 |
decimal(m,d) (近义词:number、fixed) | 由m,d决定 | 每侧每9位占4个字节,剩下的占1~4个字节 |
bit(m) | 0~2的m次方-1 1≤m≤64 | (m+7)/8 |
B.字符串类型
MySQL数据类型 | 最大长度 | 大小 |
binary(m) | 固定长度 | m字节 |
varbinary(m) | 可变长度 | l+1、l+2字节 |
char(m) | 固定长度,最多255个字符 | m*w符w表示字符集占用的字节数 |
varchar(m) | 可变长度,最多65535个字符 | l+1、l+2字节 |
tinyblob,tinytext | 2的8次方-1个字节 | l+1 |
blob,text | 2的16次方-1个字节 | l+2 |
mediumblob,mediumtext | 2的24次方-1个字节 | l+3 |
longblob,longtext | 2的32次方-1个字节 | l+4 |
enum('value1','value2') | 65535个成员 | 1,2个字节 |
set('value1','value2') | 64个成员 | 1,2,4,8个字节 |
注意点
1.非二进制串类型都可以指定字符集和排序(set,enum除外,实际上底层他们是用数字进行保存的),二进制串没有字符集和排序规则
2.char,binary都是固定长度的,分配的空间也是固定的,会给多余部分自动补全 char为空格,binary为0x00
3.char可以定义为char(0),此时值只能为null或者空字符串
4.varchar的最大可取值为65535,但是实际上可以存储的字符小于这个数,varchar需要两个字节存放长度,表里的其他列也会减少其长度
如果varchar(m)与char(m)占用的空间大小不同,varchar需要额外的字节记录长度
5.blob指的是二进制大对象,最大支持4G
6.text族与blob族的最大长度都是一样的,因为他们都是以字节衡量最大长度,只有InnoDB,MyISAM支持这两个类型的索引,而且必须指定器追长度
7.enum,set实际是数值形式存储的,enum只能是单选,set支持多选,排序顺序为定义值的先后顺序
选取具体类型主要参考点
a.值是需要二进制还是字符数九
b.比较操作是否需要区分大消息
c.对占用空间是否有要求
d.尾部填充需求
C. 日期类型
MySQL数据类型 | 最大长度 | 大小 |
date | 1000-01-01 ~ 9999-12-31 | 3个字节 |
time | -838:59:59[.000000] ~ 838:59:59[.000000] | 3个字节+fsp存储要求 |
datetime | 1000-01-01 00:00:00[.000000] ~ 9999-12-31 23:59:59 [.000000] | 5个字节+fsp存储要求 |
timestamp | 1970-01-01 00:00:01[.000000] ~ 2038-01-19 03:14:07[.000000] | 4个字节+fsp存储要求 |
year | 1901 ~ 2155 | 1个字节 |
如果需要精确到小数秒 则使用类似 date(0~6)
时间类型拥有两种属性,1插入更新,2.随着update更新