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
相关产品推荐
相关产品推荐

