Mysql数据类型

 

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

二、几种数据类型mysql

  1)整数类型sql

  可使用的整数类型: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)实数类型ui

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

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

  对于DECIMAL通常只有在存储财务数据才会使用,在数据量比较大的状况下也能够考虑使用BIGINT代替DECIMAL,将须要存储的货币单位根据小数位数乘以相应的倍数便可。指针

  3)字符串类型blog

  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内部是以一系列打包的位集合来表示。

相关文章
相关标签/搜索