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 如何处理数字,您可以阅读以下章节:
Numeric Type Overview and Numeric Types, including Out-of-Range and Overflow Handling
上一篇文章提到了这个:
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在这方面符合标准
我看了很多关于这个问题的问题,但我还没有找到解决办法。希望这不是一个重复的问题。
问题
如果我执行以下任一操作:
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 如何处理数字,您可以阅读以下章节:
Numeric Type Overview and Numeric Types, including Out-of-Range and Overflow Handling
上一篇文章提到了这个:
The server includes
dtoa
, a conversion library that provides the basis for improved conversion between string orDECIMAL
values and approximate-value (FLOAT
/DOUBLE
) numbers[...]
The dtoa library provides conversions with the following properties.
D
represents a value with aDECIMAL
or string representation, andF
represents a floating-point number in native binary (IEEE) format.[...]
conversions are lossless unless
F
is-inf
,+inf
, orNaN
. The latter values are not supported because the SQL standard defines them as invalid values forFLOAT
orDOUBLE
.
简而言之:
- SQL 标准明确禁止这些值
- MySQL在这方面符合标准