mysql中包括严格数据类型(integer,samllint,decimal,numeric),以及近似数据类型(float,real,double),扩展后增加了tinyint,
数值类型
mysql中包括严格数据类型(integer,samllint,decimal,numeric),以及近似数据类型(float,real,double),扩展后增加了tinyint,mediumint和bigint这三种长度不同的整形,并增加了bit类型,用来存放位数据。
在整数类型中,按照取值范围和存储方式不同,可以分为tinyint,smallint,mediumint,int和bigint这5个类型。对于整形数据,mysql支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。
zerofill是用‘0’填充的意思,在数字位数不够的空间用字符‘0’填满。
浮点数存在误差问题;对货币等对精度敏感的数据,应该用定点数表示或存储;在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;要注意浮点数中一些特殊值的处理。
日期时间类型
mysql中有多种数据类型可以用于日期和时间的表示。
这些数据类型的主要区别如下:
(1)如果要用来表示年月日,通常用date来表示;
(2)如果要用来表示年月日时分秒,通常用datetime表示;
(3)如果只用来表示时分秒,通常用time来表示;
(4)如果需要进场插入或者更新日期为当前系统时间,则通常使用timestamp来表示。
(5)如果只是年份,可以使用year来表示。
不同日期类型零值的表示如下所示:
数据类型 零值表示
datetime 0000-00-00 00:00:00
time 00:00:00
date 0000-00-00
timestamp 00000000000000
year 0000
字符串类型
char和varchar很类似,都用来保存mysql中较短的字符串。二者的主要区别在于存储方式的不同:char列的长度固定为创建表时声明的长度,长度可以是从0~255的任意值,,而varchar列中的值为可变长字符串,长度可以指定为0~255之间的值。在检索的时候,char删除了尾部的空格,而varchar则保留了这些空格。
由于char是固定长度的,所以它的处理速度比varchar快得多,但是它的缺点是浪费存储空间,程序需要对行尾空格进行处理,所以对于那些长度变化不大并且对查询速度有较高要求的数据可以考虑使用char类型。
如果需要保存大文本时,一般使用text或者blob,二者之间的区别主要是blob能用来保存二进制数据,比如照片,而text只能保存字符数据,比如一篇文章或者日记。
大文本查询可以使用合成索引。合成索引是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。对含有text和blob字段的表,如果经常做删除和修改记录的操作要定时执行optimize table功能对表进行碎片整理。
binary和vaebinary类似于char和vaechar,不同的是它们包含了二进制字符串。当保存binary值时,在值的最后通过填充“0x00”以达到指定的字段定义长度。
enum是枚举类型,它的值范围需要在创建表时通过枚举方式显示指定。但是enum只允许从值集合中选取单个值,而不能一次取多个值。
set类型可以从允许值中选取任意1个或者多个元素进行组合。如果集合中包含重复的单元,那么我们将会只取一次。
相关阅读:
mysql数据类型详述
mysql数据类型-decimal详解
mysql datetime数据类型设置当前时间为默认值
分析mysql数据类型的长度