unsigned tinyint
类型,没必要使用intInnoDB
存储稀疏数据时,使用NULL有很好的空间效率,因为InnoDB
使用单独的位来存储NULL,注:稀疏数据就是大部分数据为NULL,只有一小部分不是NULL,此点不适用于MyISAM
TINYINT SMALLINT MEDIUMINT INT BIGINT
5种类型,分别占用8 16 24 32 64位存储空间,可以使用unsigned
关键字仅存储正数,使其存储的正数的上限增加1倍,但要注意有符号和无符号占用相同的存储空间,具有相同的性能INT(9)
,但是,他不会限制值的合法范围,加了和不加占用相同的存储空间且具有相同的性能,后面的9仅限制了MySQL的交互工具(MySQL命令行)用来展示字符的个数FLOAT DOUBLE
使用标准的浮点数运算进行近似计算,是不精确类型DECIAML
用来存储精确的小数,可进行精确计算,为精确类型FLOAT DOUBLE
在存储相同范围的值时比DECIMAL
占用更少的空间,且计算代价较低不要将手机号存成整数!建议存成VARCHAR(20),原因如下
1.手机号有时候会到国家的区号,会出现+-()这样的字符,就比如中国的区号是+86美国是+1这样的 2.我们可以构造这样的查询like '1350634%'
查询数据库中所有山东省莱芜市移动手机号,用整数就很难实现
ROW_FORMAT=FIXED
InnoDB
会把过长的VARCHAR存储成BLOB慷慨不一定明智用VARCHAR(5)和VARCHAR(200)存储hello的空间开销是一样的,但是在查询时VARCHAR(200)会占用更多的内存,尤其是在使用内存临时表进行排序或操作时所以最好的策略是只分配真正需要的空间
TINYBLOB SMALLBLOB MEDIUMBLOB LONGBLOB
,TEXT也类似如上,BLOB和TEXT默认都对应了SMALL的那一个InnoDB
会使用专门的外部存储区域存储,然后在行内使用1-4字节的指针max_sort_length
个字节BIT(1)
存放1个位,BIT类型最多存放64个位,BIT的行为因存储引擎而异MyISAM
会打包存储所有的BIT列,比如17个单独的BIT列需要存储17位的数据,MyISAM
需要3个字节(24个位)来存放,计算方法为:ROUNDUP(17/8)*8
InnoDB
和Memory
引擎会为每个BIT列使用一个足够存储的最小整数类型,所以不能节省空间a+0
,所参与运算的值为数字65存放布尔值的野路子之使用CHAR(0)CHAR(0)可以保存NULL值和长度为0的字符串(空字符串)我们可以假定:当is null的时候为true,当is not null的时候为false当值为NULL的时候他占用1个bitMySQL permits you to create a column of typeCHAR(0)
. This is useful primarily when you have to be compliant with old applications that depend on the existence of a column but that do not actually use its value.CHAR(0)
is also quite nice when you need a column that can take only two values: A column that is defined asCHAR(0) NULL
occupies only one bit and can take only the valuesNULL
and''
(the empty string).既然他是野路子,就说明不推荐使用这样的方法
rwx
权限控制还是建议将其转换为整数存放AUTO_INCREAMENT
MyISAM
引擎默认会对字符串进行压缩存储,会导致很大的性能问题