数据类型:支持别名,如integer,bool,numeric
1、时间 DATETIME和TIMESTAMP都精确到秒。通常应该尽量使用timestamp。 datetime 能保存大范围的值,从1001年到9999年把日期和时间封装到格式YYYYMMDDHHMMSS的整数中, 与时区无关。使用8个字节的存储空间。 timestamp 存储秒数,只用4个字节,范围比datetime小:只能表示从1970到2038年。 日期的显示依赖于时区。 默认为not null,如果插入时没有指定值,则默认值为当前时间。
2、整型 tinyint(8位),smallint(16位),mediumint(24位),int(32位),bigint(64位) 整型有可选的unsigned属性,表示正数 整数计算一般使用64位的bigint 可以为整数指定宽度( 只是为用来规定mysql的交互工具显示字符的个数,不会限制值的合法范围)
3、实数 精确类型:float,double(不适合用于货币的计算) 不精确类型:decimal,decimal只是一种存储格式,在计算中decimal会转换成double类型 可以指定精度,指定小数点前后所允许的最大位数 建议只使用数据类型,不要指定精度
5、BLOB和TEXT类型 二进制方式存储:tinyblob,smallblob(blob的同义词),mediumblob,longblob 字符方式存储:tinytext,smalltext(text的同义词),mediumtext,longtext
6、使用枚举(ENUM)代替字符串类型 存储时非常紧凑,会根据列表值的数量压缩到一个或两个字节中 create table enum_test( e enum('fish','apple','dog') not null ) insert into enum_test(e) values('fish'),('dog'),('apple') 数据插入后存放在表中的数据实际上是整数而不是字符串。
7、位数据类型 bit bit(1)定义一个包含单个位的字段,bit(2)存储两个位。bit列的最大长度是64位。 mysql把bit当作字符串类型,而不是数字类型。 最好避免使用这种类型,如果要用一个bit存储一个true/false值,替代方法是创建一个char(0),可以保存空值NULL或者长度为0的字符串。 set 保存很多true/false值的集合 例如 create table acl( perms set('can_read','can_write','can_delete') not null ) insert into acl(perms) values('can_read,can_delete'); 优点:有效利用存储空间,可以使用find_in_set()等函数 缺点:改变列定义的代价太高:需要alter table,对大表来说非常昂贵。而且无法在set列上通过索引查找