Mysql基础篇(3)——MySQL数据库类型-创新互联

整数类型
类型名占用字节有符号范围无符号范围(UNSIGNED)
TINYINT1-128~1270~255
SMALLINT2-32768~327670~65535
MEDIUMINT3-8388608~83886070~16777215
INT、INTEGER4-2147483648~21474836470~4294967295
BIGINT8-9223372036854775808~92233720368547758070~18446744073709551615
浮点类型
类型名占用字节有符号范围无符号范围(UNSIGNED)
FLOAT4(-3.4E+38,-1.17E-38),0,(1.17E-38,3.4E+38)0,(1.17E-38,3.4E+38)
DOUBLE8(-1.7E+308,-2.2E-308),0,(2.2E-308,1.7E+308)0,(2.2E-308,1.7E+308)

ps:

从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供成都做网站、成都网站建设、网站策划、网页设计、申请域名网站空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
  • mysql存储浮点数的格式为:符号(S)、尾数(M)和阶码(E)。有无符号,正数的范围是一样的

  • 尾数是二进制存储的,除了以5结尾的小数,其他的都会有精度上的缺失。所以浮点数不要用“=”来判断两个数是否相等

  • 不建议定义精度M和标度D

  • 整数部分超出范围会直接报错,小数部分超出范围会四舍五入

定点数类型

DECIMAL

使用DECIMAL(M,D)方式方式表示高精度小数。0<=M<=65,0<=D<=30,D

底层是以字符串的形式存储的,这就决定了它是精确的。

不指定MD,默认是DECIMAL(10, 0)。

定点数和浮点数

定点数精确但是通常情况占用空间相对较大(M大于2/6的时候就大于float/double的占用大小了)。

相反,浮点数通常情况下相对于定点数来说占用空间小,范围大但是不精确。

位类型
类型名长度长度范围占用字节
BIT(M)M,默认11<=M<=64约为(M + 7) / 8 个字节

### 日期与时间类型

类型名介绍占用字节格式最小值大值
YEAR1YYYY或YY19012155
TIME时间3HH:MM:SS-838:59:59838:59:59
DATE日期3YYYY-MM-DD1000-01-019999-12-03
DATETIME日期时间8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP日期时间4YYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 UTC2038-01-19 03:14:07UTC

ps:

  • TIMESTAMP存储数据的时候会转换成距离1970-01-01 00:00:01 UTC的毫秒值,查询的时候会根据查询时候所在的时区将毫秒值转换成时间,因此不同时区查看看一个数据会得到不同的结果。
  • TIMESTAMP类型的日期比较相对于DATATIME来说较快。
文本字符串类型
类型字符长度长度范围(存储字节范围)占用存储空间
CHAR(M)M0<=M<=255M字符所占用的字节
VARCHAR(M)M0<=M<=65535M字符所占用的字节+1个字节
TINYTEXTL0<=L<=255L字符所占用的字节+2个字节
TEXTL0<=L<=65535L字符所占用的字节+2个字节
MEDIUMTEXTL0<=L<=16777215L字符所占用的字节+3个字节
LONGTEXTL0<=L<=4294967295L字符所占用的字节+4个字节
ENUML1<=L<=655351或2个字节
SETL0<=L<=641,2,3,4或8个字节
CHAR和VARCHAR
类型特点空间上时间上试用场景
CHAR(M)固定长度浪费存储空间效率高存储不大,速度要求高
VARCHAR(M)可变长度节省存储空间效率低非CHAR的情况

具体存储引擎的情况:

  • MyISAM:最好用CHAR,这样使得整个表静态化,以空间换时间
  • MEMORY:底层都是用固定长度去存储数据,用啥都一样
  • InnoDB:建议使用varchar类型,因为InnoDB内部行存储的格式并没有区分固定长度和可变长度(所有数据行都是用指向数据列值得头指针),而且主要影响性能因素是数据行使用的存储总量,所以一般情况除了简短并且固定长度的使用char,其他都使用varchar。
二级制字符串
类型特点值的长度占用空间
BINARY(M)固定长度M (0<= M<= 255)M个字节
VARBINARY(M)可变长度M (0<= M<= 65535)M+1个字节

和char、varchar很像

二进制大对象
类型长度长度范围占用空间
TINYBLOBL0<= L<= 255L + 1 个字节
BLOBL0<= L<= 65535(相当于64KB)L + 2 个字节
MEDIUMBLOBL0<= L<= 16777215 (相当于16MB)L + 3 个字节
LONGBLOBL0<= L<= 4294967295(相当于4GB)L + 4 个字节
TEXT和BLOB的使用注意事项
  • BLOB和TEXT值也会引起自己的一些问题,特别是执行了大量的删除或更新操作的时候。删除这种值会在数据表中留下很大的" 空洞 ",以后填入这些"空洞"的记录可能长度不同。为了提高性能,建议定期使用OPTIMIZE TABLE功能对这类表进行碎片整理

  • 把BLOB或TEXT列 分离到单独的表 中。在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的碎片 ,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT * 查询的时候不会通过网络传输大量的BLOB或TEXT值。

JSON类型

MYSQL5.7已经支持,MYSQL8.0加了自动验证的json文档和优化的存储结构。

空间类型

MySQL 空间类型扩展支持地理特征的生成、存储和分析。这里的地理特征表示世界上具有位置的任何东西,可以是一个实体,例如一座山;可以是空间,例如一座办公楼;也可以是一个可定义的位置,例如一个十字路口等等。MySQL中使用 Geometry(几何) 来表示所有地理特征。Geometry指一个点或点的集合,代表世界上任何具有位置的事物。

MySQL的空间数据类型(Spatial Data Type)对应于OpenGIS类,包括单值类型:GEOMETRY、POINT、LINESTRING、POLYGON以及集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文题目:Mysql基础篇(3)——MySQL数据库类型-创新互联
标题网址:http://scyanting.com/article/ihpcs.html