2017-01-30 61 views
0

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

问题

如果我做任何的:

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

我得到插入表0.0。有时我得到:

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

我也尝试了不同的外壳和拼写,所有的效果都一样。

我甚至试过:

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

如何插入NaN的浮点数到MySQL表?

如果真的不可能那么什么是推理? (也许我使用MySQL的版本不正确?)

使用为NaN的

我在哪里实际使用这个我不想让这些列中的NULL值的表NULL。所以,我不喜欢在ORM层

+0

标准你很可能没有得到一个错误,因为你的会话使用传统的SQL_MODE进行配置。而且,对不起,你只能存储有限的数字。 –

+0

好的。你有什么想法,为什么它是这样的?我假设MySql团队不会忘记它。他们一定是出于某种原因作出了选择? – smerlung

+0

引用[Raymond Chen](https://blogs.technet.microsoft.com/seanearp/2007/04/12/why-doesnt-this-feature-exist/):*答案为“为什么没有这个功能存在吗?“通常是”默认功能不存在“。有人需要实现它们。“ 它不像你想象中的每个功能都经过完全测试和实现,然后某个PM在某处发出了一个错误以删除您的功能。功能开始不存在,有人必须让它们发生。* –

回答

0

地方替换为null楠获得MySQL的是如何操纵数字,你可以阅读以下章节,一个总体思路的想法:

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

该服务器包括dtoa,一个转换库,对于字符串或DECIMAL值和 近似值(FLOAT/DOUBLE)号之间改进的转化提供了 基础

[...]

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

[...]

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

简而言之:

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