发布时间:2025-12-09 13:56:44 浏览次数:4
Oracle的number类型比较复杂,很多限制,但是掌握一点小技巧就能轻松搞定。
number(precision,scale)
违背第一直觉的项来了:
scale 大于 precision 时, precision表示小数点后第scale位向左最多可以有多少位数字,如果大于p则出错错,小数点后s位向右的数字四舍五入。
换个思路,换个说法,也许就好理解了。scale大于precision的时候,小数部分的精度大于整个数的精度只可能是一种情况,这个数就是小数,并且多半是0.00…xx这种。
例如,number(2,3),小数部分有3位,但是数据只能精确两位,那就只能存0.012这种,只需存12两位有效数字,如果是0.12这种就存不了,因为0.12三位有效数字就是0.120,存不了这么多位。
| MySQL数据类型 | 字节大小 | 范围-有符号 | 范围-无符号 | oracle number |
|---|---|---|---|---|
| tinyint | 1 bytes | (-128,127) | (0,255) | number(3) |
| smallint | 2 bytes | (-32 768,32 767) | (0,65 535) | number(5) |
| mediumint | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | number(8) |
| integer | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | number(10) |
| bigint | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | number(20) |
Oracle的number和MySQL的decimal非常像,但是在数据类型上区分的更细,能更好的利用存储空间,提高性能。