MYSQL数据类型
常用的数据类型有:
-
整型 (int)
-
位类型 (bit)
-
浮点型 (float, double, real)
-
定点数 (decimal, numeric)
-
日期时间类型 (date, time, datetime, year)
-
字符串 (char, varchar, text)
-
二进制 (Blob, binaly)
-
枚举 (enum)
1、数值型
整数型:tinyint(1) int(4) bitint(8) 都占4字节内存,
可选属性:unsigned(无符号类型) signed(有符号类型)
M:宽度(一般不指定)
zerofill: 0填充
浮点型:float(4) double(8)
通常FLOAT(3, 2)表示数据长度为3, 3中包括小数点后两位,所以(3,2)表示的数据最大值为9.99
注意:整型数要注意存储范围,浮点型数要注意使用精度
2、定点型 (推荐)
DECIMAL:在MYSQL中以字符串形式存放,比浮点数更精确,占用字节数为:DECIMAL(M, D) M+2个字节
DECIMAL(M,D)中,M的取值范围为0~65,D的取值范围为0~30,且有D<=M,M默认是10,D默认是0
NUMERIC等价于DECIMAL
3、日期和时间类型
注意:
-
date, datetime类型的数据,允许`不严格`语法,例如'98-12-31 11:30:45' 与 '98.12.31 11+30+45'是等价的
-
YYYYMMDD等没有间隔符的字符串,'19970523'或'970523'可以被解释为'1997-05-23',但'971332'是不合法的, 因为其中包含了不合法的日期,将自动转换为'0000-00-00'
-
如果日,月,时分秒的值小于10,'1997-01-03 01:02:03' 和 ' 1997-1-3 1:2:3'等价
-
一般存注册时间,商品发布时间等,不建议使用datetime,而是使用时间戳,便于计算,且和时区相关,timestamp类型如果插入NULL,会自动填入当前系统时间。
3、字符串型
注意:
-
char可以不指定长度,默认是1, varchar必须指定长度
-
如果char(M)中的值长度小于M,会自动用空格补齐,而varchar值长度为存入值的长度
-
text类型数据删除后容易导致空洞,使得文件碎片较多,建议单独分出去使用一个表
使用场合:
-
如果数据长度很短,比如说门牌号101,102这样的,建议使用char
-
如果固定长度的数据,使用char更合适,搜索更快
-
MyISAM和MEMORY存储引擎中无论使用char还是varchar都是作为char处理
4、特殊的NULL值
特点:
-
所有类型的值都可以是null,包括int,float等数据类型
-
空字符串“”,0, false都不等于null
-
任何运算符,判断符碰到NULL都为NULL
-
NULL的判断只能用is null 和 is not null
-
NULL影响查询速度,一般避免使值为NULL