项目场景:
使用golang数据库操作第三方包sqlx的时候,执行一个SELECT查询时,发现查不到数据,各个软件版本如下:
innodb:8.0.16
sqlx:v1.3.4
go-sql-driver/mysql:v1.6.0
golang:1.16.3
问题描述
下面三条语句直接在MySQL终端可以查询到数据,db.Select查询不到数据:
SELECT * FROM xxx WHERE start_time IS NULL AND ip = ?; # sqlx db.Select查不到数据,MYSQL直接查询可以查到3条
SELECT * FROM xxx WHERE ip = ? AND start_time IS NULL; # sqlx db.Select查不到数据,MYSQL直接查询可以查到3条
SELECT * FROM xxx WHERE ip = ? AND (start_time IS NULL); # sqlx db.Select查不到数据,MYSQL直接查询可以查到3条
其中,start_time为datetime类型,默认值为NULL。
原因分析:
sqlx db.Select在查询的时候,如果字段的默认值为NULL,查询时条件中带“某字段 IS NULL”则会查询不到数据。所以避免踩坑数据库的字段不要默认为NULL,尽量都设置默认值,db.Select查询条件的WHERE中不要带查询"IS NULL"的语句。
本文介绍使用Golang sqlx包时遇到无法查询NULL值的问题。该问题发生在查询带有IS NULL条件时,即使直接通过MySQL终端能获取到数据。解决方法是避免使用默认NULL值并调整查询语句。
245

被折叠的 条评论
为什么被折叠?



