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