You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GORM插入float64值始终为0,排查MariaDB与Go结构体问题

排查Go结构体插入MariaDB后available_percentage值为0的问题
  • 结构体DB标签不匹配:Go数据库驱动(如sqlx、GORM)依赖结构体标签映射数据库列名,要是标签里的名字和MariaDB的available_percentage对不上,驱动会直接忽略该字段,导致插入默认值0。
    错误示例(驼峰名不匹配数据库下划线字段):

    type A struct {
        AvailablePercentage float64 `db:"availablePercentage"`
    }
    

    正确写法(和数据库字段名一致):

    type A struct {
        AvailablePercentage float64 `db:"available_percentage"` // sqlx适用
        // 若用GORM则写:`gorm:"column:available_percentage"`
    }
    
  • 插入语句遗漏字段:如果是手动编写SQL插入语句,别漏写available_percentage列。比如只插入其他字段时,数据库会给该字段填充默认值0。检查你的SQL是否包含目标字段:

    INSERT INTO your_table (available_percentage, other_column) VALUES (?, ?)
    

    同时确认Go代码里有没有误将AvailablePercentage赋值为0,或是变量作用域问题导致值未正确传递。

  • 数据库字段定义异常:执行SQL查看表结构,确认字段配置无误:

    DESCRIBE your_table;
    

    检查available_percentage的类型确实是DOUBLE,默认值不为0,也没有强制修改值的异常约束。

  • 直接传值排除结构体问题:跳过结构体,直接写简单插入语句测试值是否能正常存入:

    _, err := db.Exec("INSERT INTO your_table (available_percentage) VALUES (?)", 99.55)
    

    要是这样能成功插入99.55,说明问题出在结构体映射;要是仍存0,就排查数据库驱动或数据库本身的配置。

  • 开启日志查看实际执行SQL:开启驱动的日志功能,查看实际执行的SQL和参数值。比如GORM可以用Debug()模式:

    db.Debug().Create(&yourAInstance)
    

    如果日志显示参数是0,说明是Go代码里值的问题;参数正确但数据库存0,就去排查数据库端的问题。


内容的提问来源于stack exchange,提问作者mayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:05:00