数字类型(Numeric):
包含两个子类:精确数字与近似数字。精确数字类型对应有限范围内的数值。
数据类型 | 范围 | 存储 |
bigint | -2^63(-9223372036854775808)到2^63-1(9223372036854775807)到2^63() | 8 |
int | -2^31(-2147483648)到-2^31-1(-2147483647) | 4 |
smallint | -2^15(-32768)到2^15-1(-32767) | 2 |
tinyint | 0-255 | 1 |
money | -922337203685477.5808到922337203685477.5807 | 8 |
smallmoney | -214748.3648到214748.3647 | 4 |
精确数字类型还包括另外两种数据类型:decimal 和 numeric。两者在小数位与精度上有细微的差别。本质功能上是等价的,即存储的内容与存储的方式是一致的。精度指的是最多可以存储的数字的总位数,包括小数点左边和右边的位数。精度值的范围为 1-38。默认精度为 18。而小数指的是小数点右边可以存储的十进制数字的最大位数。小数位数必须是 0 到精度 p 之间的值。因此向存储一个精度为 4 的数字,小数点左右两边各有 2位,则应该使用的数据类型为 decimal(4,2)。
精度 | 存储字节数 |
1~9 | 5 |
10~19 | 9 |
20~28 | 13 |
29~38 | 17 |
近似数字子类类似于 decimal 和 numeric 型,其中有一种也有精度,即浮点(float)型;
另一种 real 型则没有精度值,但可以存储数高达 7 位的数字,位数包括小数点左边和右边的数字。例如,想在 real 型中存储数字 1234.5678 时,其值近似为 1234.568。当然如果希望精度保持不变,这应该将数字存储在 float(25) 中。
decimal 和 float 数据类型间主要的区别在于:前者存储的精度级别更高。
n 值 | 精度 | 存储大小 |
1~24 | 7 位数 | 4 字节 |
25~53 | 15 位数 | 8 字节 |