Mysql数据类型

 

1、mysql存储的数据类型遵循以下几个原则会更优
  1) 更小通常更好
  尽量使用可以正确储存数据的最小数据类型,可占用更少的磁盘、内存和CPU缓存,同时需要处理的CPU周期也更少
  2)简单更好
  简单的数据通常需要更少的CPU操作周期,整型比字符串类型操作复杂度更低。
  3) 尽量避免NULL
  通常情况下最好指定列为NOT NULL,但是把NULL改成NOT NULL 对性能带来的提升比较少。一般在索引列上最好避免NULL值,因为如果包含NULL,使得索引和索引统计都比较复杂。

2、几种数据类型

  1)整数类型

  可以使用的整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,分别使用8,16,24,32,64位存储空间,存储值的范围为-2(N-1)到 2(N-1)-1。对于整数可以选择unsigned属性,表示不允许为负数这可以让正数上限提高一倍。

  对于INT类型如果不指定宽度,Mysql会默认指定11位,但是其实是不会限制值的合法范围,只是规定了Mysql的一些交互工具用来显示字符的个数,对于存储来说INT(1)和 INT(20) 是相同的。

  如下图例子中,对于int(1), int(10), int(32)设置的数据表字段宽度并不影响int值的存入。

  2)实数类型

  FLOAT和DOUBLE类型支持使用标准的浮点运算进行近似计算。DECIMAL类型用于存储精确的小数,在Mysql5.0和更高的版本中,DECIMAL类型支持精确计算。

  浮点类型在存储同样范围的值时,通常比DECIMAL使用更少的空间。FLOAT使用4个字节存储,DOUBLE占用8个字节,和int类型一样数据类型才能觉得存储数据上限,字段位数决定不了。

  对于DECIMAL一般只有在存储财务数据才会使用,在数据量比较大的情况下也可以考虑使用BIGINT代替DECIMAL,将需要存储的货币单位根据小数位数乘以相应的倍数即可。

  3)字符串类型

  VARCHAR:用于存储可变长字符串,比定长类型更节省空间,仅需要必要的空间,但是需要一个或者两个额外字节记录字符串长度,如果最大长度小于或者等于255字节,则使用1个字节表示,否则用2个字节。对于字符串列的最大长度比平均长度大很多;列更新很少;使用了UTF-8复杂的字符集,VARCHAR会比较合适

  CHAR:定长的类型,Mysql根据定义的字符串长度分配足够的空间,比较适合存储很短的字符串,或者所有值都接近同一长度的存储要求。

  BLOB和TEXT类型:两种都是为了存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。当BLOB和TEXT值太大时,InnoDB会使用专门的“外部”存储区域来进行存储,这时在数据表中存储的实际时一个指针指向外部的实际存储区域。

  4)时间类型

  DATETIME:能够保存1001年到9999年,精度为秒,把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。

  TIMESTAMP:保存从1970到2038年,使用4个字节存储,与时区有关。所以如果在多个时区存储访问数据,DATETIME和TIMESTAMP的行为会很不一样。通常尽量使用TIMESTAMP,因为比DATETIME空间效率更高

  5)位数据类型

  BIT:在Mysql5.0以前,BIT是TINYINT的同义词,但在后续的版本中是完全不同的数据类型。Mysql把BIT当作字符串类型而不是数字类型,当检索BIT(1)值时结果时一个包含二进制0或1的字符串,而不是ASCII码的0和1。

  SET:如果需要保存很多true/false值,可以考虑合并这些列到一个SET数据类型,它在Mysql内部是以一系列打包的位集合来表示。

 

posted on 2018-10-21 20:57  kma  阅读(95)  评论(0编辑  收藏  举报

导航