整形
存储类型 | 存储空间(字节) | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 4147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
老生常谈的问题
- int(11) VS int(21) 有什么区别
是存储空间有区别?还是存储范围有区别?
答案是:都没有区别,只在特性情况下显示上有些区别
1 | # 设置空位补零 |
1 | # 默认情况下数字前面不会补零 |
浮点型
类型 | 存储空间(字节) | 精度 | 精确性 |
---|---|---|---|
FLOAT | 4 | 单精度 | 非精确 |
DOUBLE | 8 | 双精度 | 比FLOAT精度高 |
- FLOAT(9,5)
- DOUBLE(9,5)
指定数字的总位数最大为9,小数点后最多显示5位数
FLOAT和DOUBLE都是非精确型的数据类型,非精确型的数据类型的问题是精度的丢失
1 | mysql> create table `t` ( -> `a` int(11) default null, |
精确的数字类型
DECIMAL(9,5) 定点数-更精确的数字类型
- 高精度的数据类型,常用来存储交易相关的数据
- DECIMAL(M,N),M代表总精度,N代表小数点右侧的位数(1 < M < 254; 0 < N < 60)
- 和FLOAT和DOUBLE不同的是,DECIMAL的存储空间是变长的
经验之谈
- 存储性别、省份、类型等分类信息时选择TINYINT或者enmu
- BIGINT存储空间更大,INT和BIGINT之间通常选择GIBINT
- 交易等高精度数据时选择使用DECIMAL数据类型