【问题标题】:Inserting NaN value into MySQL Database将 NaN 值插入 MySQL 数据库
【发布时间】:2018-01-27 03:14:09
【问题描述】:

我有一些包含 NULL、浮点数和偶尔的 Nan 的数据。我正在尝试使用 python 和 MySqldb 将此数据插入到 MySQL 数据库中。

插入语句如下:

for row in zip(currents, voltages):
        row = [id] + list(row)
        for item in row:
            sql_insert = ('INSERT INTO result(id, current, voltage)'
                            'VALUES(%s, "%s")')
            cursor.execute(sql_insert, row)

这是桌子:

CREATE TABLE langmuir_result (result_id INT auto_increment, 
                              id INT, 
                              current FLOAT,
                              voltage FLOAT,
                              PRIMARY KEY (result_id));

当我尝试将 NaN 插入表中时,出现此错误:

_mysql_exceptions.DataError: (1265, "Data truncated for column 'current' at row 1")

我想将 NaN 值作为浮点数或数字插入数据库,而不是字符串或 NULL。我尝试让列的类型为 FLOAT 和 DECIMAL 但得到相同的错误。我怎样才能做到这一点而不使其成为字符串或NULL?这可能吗?

【问题讨论】:

  • 不,不能在 Mysql 的 FLOAT 类型列中存储 NaN 值。允许的值只有 NULL 或数字。您可以使用一些不用于 NaN 的值来解决它(可能是负数,一个大/低值)
  • 如果您知道要存储的浮点数的大小,NaN 会专门编码为 IEEE 浮点数。 “IEEE 754 NaN 用填充了 1 的指数字段(如无穷大值)和有效数字中的一些非零数字表示(使它们与无穷大值不同)”en.wikipedia.org/wiki/NaN#Floating_point
  • @nacho 完美,谢谢!如果您想添加它作为答案,我会接受它
  • @VoNWooDSoN 我不知道尺寸,它是由传感器生成的

标签: python mysql python-2.7 mysql-python


【解决方案1】:

尝试将您的 NaN 转换为 None,因为 MySQL 理解 None,并且在 UI 中您会看到 NULL

【讨论】:

    【解决方案2】:

    不,不能在 Mysql 的 FLOAT 类型列中存储 NaN 值。允许的值只有 NULL 或数字。你可以使用一些你不用于 NaN 的值来解决它(可能是负数,一个大/低的值)

    【讨论】:

    • 而且 MySQL 中没有 NaN 值这样的东西。这严格来说是一个 Python numpy/pandas 实体。
    • 这是不正确的。 NaN 是 IEEE 标准的一部分,而不是 Python/numpy/pandas 实体。 en.wikipedia.org/wiki/NaN
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多