MySql IEEE 浮点 NaN、PositiveInfinity、NegativeInfinity

MySql IEEE floating point NaN, PositiveInfinity, NegativeInfinity

我看了很多关于这个问题的问题,但我还没有找到解决办法。希望这不是一个重复的问题。

问题

如果我执行以下任一操作:

INSERT INTO `Numbers`(`Number`) VALUES ('NaN')
INSERT INTO `Numbers`(`Number`) VALUES ('Inf')
INSERT INTO `Numbers`(`Number`) VALUES ('+Inf')

我在 table 中插入了 0.0。有时我得到:

Error Code: 1265. Data truncated for column 'Number'

我也试过不同的大小写和拼写,都是一样的效果。

我什至尝试过:

INSERT INTO `Numbers`(`Number`) VALUES ('1111111111111000000000000000000000000000000000000000000000000000')

如何将 NaN 浮点数插入 MySql table?

如果真的不可能那么原因是什么? (也许我使用的 MySql 版本不正确?)

将 NULL 用作 NaN

我实际使用它的 tables 我不想在这些列中允许 NULL 值。所以我不喜欢在 ORM 层的某处用 NULL 替换 NaN 的想法

要全面了解 MySQL 如何处理数字,您可以阅读以下章节:

上一篇文章提到了这个:

The server includes dtoa, a conversion library that provides the basis for improved conversion between string or DECIMAL values and approximate-value (FLOAT/DOUBLE) numbers

[...]

The dtoa library provides conversions with the following properties. D represents a value with a DECIMAL or string representation, and F represents a floating-point number in native binary (IEEE) format.

[...]

conversions are lossless unless F is -inf, +inf, or NaN. The latter values are not supported because the SQL standard defines them as invalid values for FLOAT or DOUBLE.

简而言之:

  • SQL 标准明确禁止这些值
  • MySQL在这方面符合标准