MySQL入门课程:浮点数类型
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询MySQL入门课程:浮点数类型,MySQL支持所有的ANSI/ISO SQL92的浮点数字类型。这些类型包括准确数字的数据类型(NUMERIC, DECIMAL),也包括近似数字的数据类型(FLOAT, REAL,和DOUBLE PRECISION)。关键词DEC是DECIMAL一个同义词:
FLOAT[(M,D)] [ZEROFILL]
取值范围:-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38
存储要求:4个字节
DOUBLE[(M,D)] [ZEROFILL]、DOUBLE PRECISION[(M,D)] [ZEROFILL]
取值范围:-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308
存储要求:8个字节
DECIMAL(M[,D]) [ZEROFILL]、NUMERIC(M[, D]) [ZEROFILL]
取值范围:实际的范围可以通过M和D的选择被限制
存储要求:M字节(低于3.23版本)M+2字节(3.23或更高版本)
NUMERIC和DECIMAL类型
表1-6 M和D对DECIMAL类型取值范围的影响
类 型 说 明 |
取值范围(MySQL < 3.23) |
取值范围(MySQL * 3.23) |
DECIMAL(4,
1) |
-9.9 到 99.9 |
-999.9 到 9999.9 |
DECIMAL(5,
1) |
-99.9 到 999.9 |
-9999.9 到 99999.9 |
DECIMAL(6,
1) |
-999.9 到 9999.9 |
-99999.9 到 999999.9 |
DECIMAL(6,
2) |
-99.99 到 999.99 |
-9999.99 到 99999.99 |
DECIMAL(6,
3) |
-9.999 到 99.999 |
-999.999 到 9999.999 |
给定的 DECIMAL 类型的取值范围取决于MySQL 的版本。
对于 MySQL 3.23 以前的版本,DECIMAL(M, D) 列的每个值占用 M 字节,而符号(如果需要)和小数点包括在 M 字节中。因此,类型为 DECIMAL(5,2) 的列,其取值范围为 -9.99 到 99.99,因为它们覆盖了所有可能的 5 个字符的值。
对于MySQL 3.23,DECIMAL 值是根据 ANSI 规范进行处理的,ANSI 规范规定 DECIMAL(M, D) 必须能够表示 M 位数字及 D 位小数的任何值。例如,DECIMAL(5, 2) 必须能够表示从 -999.99 到 999.99 的所有值。而且必须存储符号和小数点,因此自 MySQL 3.23 以来 DECIMAL 值占 M + 2 个字节。对于 DECIMAL(5, 2),“最长”的值(-999.99)需要 7 个字节。在正取值范围的一端,不需要正号,因此 MySQL 利用它扩充了取值范围,使其超过了 ANSI 所规范所要求的取值范围。如 DECIMAL(5, 2) 的最大值为 9999.99,因为有 7 个字节可用。
简而言之,在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于更早版本中的 DECIMAL(M + 2, D) 的取值范围。