学习笔记--mysql常用数据类型总结
2016-11-21 21:00
901 查看
Mysql常用数据类型包括:整数类型,实数类型,字符串类型,日期时间类型。
整数类型
包括tinyint, smallint, mediumint, int, bigint,对应存储空间分别为8,16,24,32,64位存储空间,长度上来说,tinyint对应java中的byte,8位;smallint对应java中short,16位;int与java中int对应,32位;bigint和java中long对应,64位。需要注意java中的位数是指内存中的空间,而mysql的存储空间是指在磁盘中的占用空间,mysql内存中对整数进行运算时会使用64位的bigint来计算而非指定类型。
整数类型有可选的unsigned属性,表示不允许负值,可以使正数上限提升1倍。
还有一种指定宽度的语法,比如int(20),一般没有什么实际意义,它不会限制值的范围,只龟头了mysql一些交互工具显示字符的个数,对于存储和计算来说int(1)和int(20)是没有区别的。
实数类型
包括定点数和浮点数,定点数的关键字是decimal(m, n),m表示总位数,n表示小数点后的位数,在mysql 5.0以后的版本中,decimal的运算由mysql服务实现,为高精度运算。decimal的存储格式为数字字符串,最多支持65个数字。
浮点数包括float和double,分别占用4个和8个字节(和java中的float以及double相同),mysql内部运算统一使用double。
可以看出,decimal无论运算还是存储,代价都比较高,通常只在对运算结果精度有很高要求时才使用,比如计算钱的时候。但通常计算钱的时候,比如分,可以先乘以100,在使用bigint存储,这样比使用decimal更好。所以,decimal一般不怎么用。
字符串类型
mysql字符串类型包括varchar和char, 定义varchar和char都需要指定长度。不同的是varchar在存储时只存储需要的长度(需要一个额外的字节来存储varchar的长度),而char则固定占用指定的长度。
显然varchar更节省空间,但由于是变长的,update的时候需要额外的工作。通常只在一些长度相对固定,变化频繁的场景使用char,其余场景一般选择varchar。
注意一点,虽然varchar定义时指定的长度不影响最终存储需要的空间,但会占用更大的内存空间(分配内存是按这个长度分配的),所以也不宜过大。
Text和Blob
这俩为存储大块数据而设计的,Text为字符串方式存储,有排序规则和字符集,包括timytext, smalltext, text, mediumtext, longtext。Blob为二进制方式存储,没有排序规则和字符集,包括tinyblob, smallblob, blob, mediumblob, longblob。与其他类型不同,mysql会把blob和text当成独立的对象来处理,存储引擎也会对text和blob做特殊处理,比如使用外部存储区域存储大对象,而行内只存储一个指针。
枚举enum
枚举是一个预定义集合,比如一列字符串,只有固定的几个值,通常就需要将其定义为枚举,比如enum(‘string1’, ‘string2’, ‘string3’)。这样在存储时就只需要存储整数1,2,3表示哪个枚举字符串,比直接存储字符串大大的减少了存储空间。
注意使用枚举后排序的依据就是枚举中的位置,而不是字符串排序的结果。
日期和时间类型
mysql提供datetime和timestamp两种时间类型,底层都是整数,datatime把时间封装到YYYYMMDDHHMMSS整数中,占8个字节,可以从1001年表示到9999年
timestamp与UNIX时间戳相同,存储从格林尼治时间1970-1-1 00:00:00以来的秒数,占用4个字节空间,范围是1970年到2038年的时间,timestamp的显示值依赖于时区, mysql服务器,操作系统和客户端连接都有时区设置。
timestamp占用空间更小,对时区也比较好处理,一般选择timestamp
整数类型
包括tinyint, smallint, mediumint, int, bigint,对应存储空间分别为8,16,24,32,64位存储空间,长度上来说,tinyint对应java中的byte,8位;smallint对应java中short,16位;int与java中int对应,32位;bigint和java中long对应,64位。需要注意java中的位数是指内存中的空间,而mysql的存储空间是指在磁盘中的占用空间,mysql内存中对整数进行运算时会使用64位的bigint来计算而非指定类型。
整数类型有可选的unsigned属性,表示不允许负值,可以使正数上限提升1倍。
还有一种指定宽度的语法,比如int(20),一般没有什么实际意义,它不会限制值的范围,只龟头了mysql一些交互工具显示字符的个数,对于存储和计算来说int(1)和int(20)是没有区别的。
实数类型
包括定点数和浮点数,定点数的关键字是decimal(m, n),m表示总位数,n表示小数点后的位数,在mysql 5.0以后的版本中,decimal的运算由mysql服务实现,为高精度运算。decimal的存储格式为数字字符串,最多支持65个数字。
浮点数包括float和double,分别占用4个和8个字节(和java中的float以及double相同),mysql内部运算统一使用double。
可以看出,decimal无论运算还是存储,代价都比较高,通常只在对运算结果精度有很高要求时才使用,比如计算钱的时候。但通常计算钱的时候,比如分,可以先乘以100,在使用bigint存储,这样比使用decimal更好。所以,decimal一般不怎么用。
字符串类型
mysql字符串类型包括varchar和char, 定义varchar和char都需要指定长度。不同的是varchar在存储时只存储需要的长度(需要一个额外的字节来存储varchar的长度),而char则固定占用指定的长度。
显然varchar更节省空间,但由于是变长的,update的时候需要额外的工作。通常只在一些长度相对固定,变化频繁的场景使用char,其余场景一般选择varchar。
注意一点,虽然varchar定义时指定的长度不影响最终存储需要的空间,但会占用更大的内存空间(分配内存是按这个长度分配的),所以也不宜过大。
Text和Blob
这俩为存储大块数据而设计的,Text为字符串方式存储,有排序规则和字符集,包括timytext, smalltext, text, mediumtext, longtext。Blob为二进制方式存储,没有排序规则和字符集,包括tinyblob, smallblob, blob, mediumblob, longblob。与其他类型不同,mysql会把blob和text当成独立的对象来处理,存储引擎也会对text和blob做特殊处理,比如使用外部存储区域存储大对象,而行内只存储一个指针。
枚举enum
枚举是一个预定义集合,比如一列字符串,只有固定的几个值,通常就需要将其定义为枚举,比如enum(‘string1’, ‘string2’, ‘string3’)。这样在存储时就只需要存储整数1,2,3表示哪个枚举字符串,比直接存储字符串大大的减少了存储空间。
注意使用枚举后排序的依据就是枚举中的位置,而不是字符串排序的结果。
日期和时间类型
mysql提供datetime和timestamp两种时间类型,底层都是整数,datatime把时间封装到YYYYMMDDHHMMSS整数中,占8个字节,可以从1001年表示到9999年
timestamp与UNIX时间戳相同,存储从格林尼治时间1970-1-1 00:00:00以来的秒数,占用4个字节空间,范围是1970年到2038年的时间,timestamp的显示值依赖于时区, mysql服务器,操作系统和客户端连接都有时区设置。
timestamp占用空间更小,对时区也比较好处理,一般选择timestamp
相关文章推荐
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- Mysql学习笔记之常用数据类型
- Mysql学习笔记之常用数据类型
- Mysql学习笔记之常用数据类型 (转)
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- Mysql学习笔记之常用数据类型
- Mysql学习笔记之常用数据类型
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- Mysql学习笔记之常用数据类型
- Mysql常用数据类型详细说明及实例说明(学习笔记一)
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- mysql学习笔记03 mysql数据类型
- oracle学习笔记--常用数据类型及函数
- Mysql的常用数据类型以及用途总结
- mysql数据类型学习笔记
- MySQL学习笔记——数据类型之浮点数类型和定点数类型
- MySQL学习笔记——数据类型之整数类型
- Python学习笔记之数据类型总结
- mysql基本数据类型(mysql学习笔记三)
- MySQL学习笔记(二)数据类型及数据表的相关操作