浮点类型
TiDB 支持 MySQL 所有的浮点类型,包括 FLOAT
、DOUBLE
,完整信息参考这篇文档。
字段说明:
语法元素 | 说明 |
---|---|
M | 小数总位数 |
D | 小数点后位数 |
UNSIGNED | 无符号数,如果不加这个标识,则为有符号数 |
ZEROFILL | 补零标识,如果有这个标识,TiDB 会自动给类型增加 UNSIGNED 标识 |
类型定义
FLOAT
类型
单精度浮点数。允许的值范围为 -2^128 ~ +2^128,也即 -3.402823466E+38 到 -1.175494351E-38、0 和 1.175494351E-38 到 3.402823466E+38。这些是基于 IEEE 标准的理论限制。实际的范围根据硬件或操作系统的不同可能稍微小些。
FLOAT(p)
类型中,p
表示精度(以位数表示)。只使用该值来确定是否结果列的数据类型为 FLOAT
或 DOUBLE
。如果 p
为从 0 到 24,数据类型变为没有 M 或 D 值的 FLOAT
。如果 p
为从 25 到 53,数据类型变为没有 M 或 D 值的 DOUBLE
。结果列范围与本节前面描述的单精度 FLOAT
或双精度 DOUBLE
数据类型相同。
{{< copyable “sql” >}}
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
FLOAT(p) [UNSIGNED] [ZEROFILL]
警告:
与在 MySQL 中一样,
FLOAT
数据类型存储近似值。对于货币之类的精确值,建议使用DECIMAL
类型。
DOUBLE
类型
双精度浮点数,别名为 DOUBLE PRECISION
。允许的值范围为:-2^1024 ~ +2^1024,也即是 -1.7976931348623157E+308 到 -2.2250738585072014E-308、0 和 2.2250738585072014E-308 到 1.7976931348623157E+308。这些是基于 IEEE 标准的理论限制。实际的范围根据硬件或操作系统的不同可能稍微小些。
{{< copyable “sql” >}}
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE PRECISION [(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]
警告:
与在 MySQL 中一样,
DOUBLE
数据类型存储近似值。对于货币之类的精确值,建议使用DECIMAL
类型。
存储空间
每种类型对存储空间的需求如下表所示:
类型 | 存储空间 |
---|---|
FLOAT |
4 |
FLOAT(p) |
如果 0 <= p <= 24 为 4 个字节, 如果 25 <= p <= 53 为 8 个字节 |
DOUBLE |
8 |