环境:go 1.19 + mysql
数据库表:(模拟数据)
ID | COL1 | COL2 | COL3 | STAT |
---|---|---|---|---|
1 | 11 | 12 | (null) | 1 //查不到,查出为 int 默认值 0 |
2 | 21 | 22 | 23 | 0 |
3 | 31 | 32 | 33 | 0 |
在对如上内容进行查询时,我使用简单的原生 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和赋值顺序,就解决了这个问题。
暂时先将规律分享出来,至于原理还不清楚,疑点大致包括:
时间紧迫,看到一篇关于 golang sql 空值的文章,先留个链接,有空再分析
https://blog.csdn.net/qiuchangyong/article/details/108280881