数值数据类型
tinyint 有符号范围为-128到127,无符号为0到255,占用空间1字节
smallint 有符号为-32768到32767,无符号为0到65535,占用空间2字节
int 有符-2147483648到2147483647, 无符号为0到4294967295,占用空间4字节
mediumint有符号为-8388608到8388607,无符号为0到16777215,占用空间3字节
bigint 有符号为-(2^23)~(2^23 - 1),无符号为0~(2^24 - 1),占用空间字节为8字节
浮点数类型
float(m,d)不能使用无符号的浮点数字,可以定义显示长度m和小数位数d,默认的为10,2
double(m,d)不能使用的双精度浮点数,默认的为16,4,存经纬度用此类型
定点数类型
decimal(m,d)非压缩浮点数不能是无符号的,显示长度和小数的数量是必须的,在精度要求比较高的应用中(如货币)要使用定点数来保存数据
日期和时间类型
类型名称 日期格式 占用空间
YEAR YYYY 1个字节
TIME HH:MM:SS 3个字节
DATE YYYY-MM-DD 3个字节
DATETIME YYYY-MM-DD HH:MM:SS 8个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 4个字节
字符串类型
char(M),M为0~255之间的整数
varchar(M),M为0~65536之间的整数,值的长度+1个字节
tinyblob,允许长度为0~255字节,值的长度+1个字节
blob,允许长度为0~65535字节,值的长度+2个字节
mediumblob ,允许长度为0~167772150字节,值的长度+3个字节
longblob ,允许长度为0~4294967295字节,值的长度+4个字节
tinytext,允许长度为0~255字节,值的长度+2个字节
text,允许长度为0~65535字节,值的长度+2个字节
mediumtext,允许长度为0~167772150字节,值的长度+3个字节
longtext ,允许长度为0~4294967295字节,值的长度+4个字节
enum,枚举,存储需求为1或两个字节
set,一个设置,字符串对象可以有零个或多个set成员,存储需求为1,2,3,4或8个字节
数据类型的选择注意事项
BLOB是二进制串,用来存储音频、图片等二进制数据;TEXT是非二进制字符串,用来存放纯文本文件,虽然存储文本文件本质上也是存储二进制,但是TEXT会有一个字符集,会转化为可显示字符。
CHAR是固定长度,优点是处理速度快,缺点是浪费空间;
VARCHAR是可变长度,优点是节省空间,缺点是处理速度慢。
对于MyISAM存储引擎,最好使用固定长度的数据列,以使整个数据表静态化,从而缩短数据检索时间,用空间换时间;
对于InnoDB存储引擎,推荐使用VARCHAR,因为InnoDB数据表的存储格式不分固定长度和可变长度,所以在检索时间上固定长度和可变长度差不多,所以,使用VARCHAR就比较节省空间了。
对于日期类型的选择,如果应用只需要记录年,那么用一个字节来存储的year就可以满足需求,这样不仅能节约存储,更能提高 表的操作效率
如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用datetime,而不是要使用timestamp,因为timestamp表示的日期范围比datetime要短的多,如果要记录的日期需要让不同时区的用户使用,那么最好使用timestamp,因为日期类型中只用它能够和实际时区相对应