GOLANG 原生SQL 为什么 查询不到字段值

环境:go 1.19 + mysql

数据库表:(模拟数据)

IDCOL1COL2COL3STAT
11112(null)1 //查不到,查出为 int 默认值 0
22122230
33132330

在对如上内容进行查询时,我使用简单的原生 queryRow 函数,大致如下

//定义接收的结构体
var e myStruct

//执行查询
curr := Dbc.QueryRow("SELECT `col1`,`col2`,`col3`,`stat` FROM `table` WHERE ...", args...)

//查询结果赋值
curr.Scan( &e.col1,&e.col2, &e.col3, &e.stat)

第一行最后一个字段为 1 其他行大多数是 0 但是从golang查询后,所有的该字段都是0

在反复确认了 SQL 和代码写的没有问题之后,黔驴技穷的我尝试逐个字段查询,没想到,如果只查询这一个字段的话,是可以查到值的,但是整行查询却查不到。

想必看到上面的模拟数据,也能看出端倪了,没错,正是之前字段的 NULL 值,导致了这个字段失效。

由于我的数据比较工整,我的解决方式是先查询 stat 字段,最后查询可能为空的字段,即调整了SQL和赋值顺序,就解决了这个问题。

暂时先将规律分享出来,至于原理还不清楚,疑点大致包括:

  • 空值会导致接下来一个字段无法查询,还是接下来所有字段都取不到值?
  • 如果多个字段同时可能为空,如何优雅的通过一个 SQL 查询,而不是每次分别查询?
  • 为什么?

时间紧迫,看到一篇关于 golang sql 空值的文章,先留个链接,有空再分析

https://blog.csdn.net/qiuchangyong/article/details/108280881

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

控场的朴哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值