浮点类型

TiDB 支持 MySQL 所有的浮点类型,包括 FLOATDOUBLE,完整信息参考这篇文档。

字段说明:

语法元素 说明
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 表示精度(以位数表示)。只使用该值来确定是否结果列的数据类型为 FLOATDOUBLE。如果 p 为从 0 到 24,数据类型变为没有 M 或 D 值的 FLOAT。如果 p 为从 25 到 53,数据类型变为没有 M 或 D 值的 DOUBLE。结果列范围与本节前面描述的单精度 FLOAT 或双精度 DOUBLE 数据类型相同。

{{< copyable “sql” >}}

  1. FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
  2. 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” >}}

  1. DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
  2. 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