mysql数据类型
2018-08-30 本文已影响0人
hk_faith
整形
int , smallint ,mediumint , int ,bigint
浮点型
Float ,double , decimal
- decimal 可以存储比 bigint 还大的整数也可以存储精确的小数。
- Float 和 double 支持标准的浮点进行近似计算,但是decimal 不行,可以把他理解成把decimal 当成字符串处理的。所以存储的数据大。如果对其进行位数限制的时候,会四舍五入的计算
字符串
Char ,varchar ,text ,blob,enum
- Varchar 用于存储可变长字符串,比定长类型(char)要节省空间,但varchar要额外用 1 或则 2 个字节存储长度。列长度小于255的时候用1个否则使用2个 ,varchar当超出指定的长度的时候会截掉,后者报错(有的版本)
- char 是定长的,会根据指定的长度来分配空间,会根据需要采用空格进行填充以方便比较,适合存储很短的字符串或以知道的字符串都接近一个长度。如:md5 加密或的密码 char(32) ,超出长度会截断。
- 对于经常变更的数据char 比 varchar 更好,char不容易产生碎片,只分配真正需要的空间,更长的列会消耗更多的内存。
- 尽量避免使用blob 和text 类型 ,查询会使用临时表,导致性能的严重的开销。当进行大量的删除操作的时候,会在数据表中留下大量的空洞,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理。
- Enum 在数据库的内部是按 整形存的,所以不用整形来作为枚举的元素,,如果进行排序也会根据内部的整形进行的排序。
日期时间类型
Timestamp ,datetime
注意:尽量使用timestamp ,要比datetime空间效率高。如果存微秒用bigin
数据类型属性
Unsigned , zerofill , null ,not null , default , primary key , auto_increment
关系: 如果选择了zerofill 一定是 unsigned , 选择了unsigned 可以不选择 zerofill ,
问题
- int(3) 和 int(11) 的区别 :int 无符号时,他的最大存储数值已经定了,只有在 zerofill的时候,差别会在前面补0