MySql IEEE 浮点 NaN、PositiveInfinity、NegativeInfinity

sme*_*ung 5 mysql nan infinity ieee-754

我已经看过很多关于这个问题的问题,但我还没有找到解决方案。希望这不是一个重复的问题。

问题

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

INSERT INTO `Numbers`(`Number`) VALUES ('NaN')
INSERT INTO `Numbers`(`Number`) VALUES ('Inf')
INSERT INTO `Numbers`(`Number`) VALUES ('+Inf')
Run Code Online (Sandbox Code Playgroud)

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

Error Code: 1265. Data truncated for column 'Number'
Run Code Online (Sandbox Code Playgroud)

我也尝试过不同的大小写和拼写,都具有相同的效果。

我什至尝试过:

INSERT INTO `Numbers`(`Number`) VALUES ('1111111111111000000000000000000000000000000000000000000000000000')
Run Code Online (Sandbox Code Playgroud)

如何将 NaN 浮点数插入 MySql 表中?

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

使用 NULL 作为 NaN

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

Álv*_*lez 4

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

上一篇文章提到了这一点:

服务器包括一个转换库,它为改进字符串或值与近似值 ( / ) 数字dtoa之间的转换提供了基础DECIMALFLOATDOUBLE

[...]

dtoa 库提供具有以下属性的转换。D 表示具有 或 字符串表示形式的值DECIMAL,并F 表示本机二进制 (IEEE) 格式的浮点数。

[...]

F除非-inf+inf或 ,否则转换是无损的NaN。不支持后面的值,因为 SQL 标准将它们定义为FLOAT或 的无效值DOUBLE

简而言之:

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