golang mysql nil_解决Go语言数据库中null值的问题

本文详细介绍了在Go语言中使用database/sql库处理数据库null值的问题,包括如何读取和插入null值,以及如何避免相关错误。推荐使用sql.Null***结构体来处理可能为null的值,并提供了转换辅助函数提高效率。
摘要由CSDN通过智能技术生成

本文主要介绍如何使用go语言database/sql库从数据库中读取null值的问题,以及如何向数据库中插入null值。本文在这里使用的是sql.NullString, sql.NullInt64, sql.NullFloat64等结构体,为了方便书写,它们的泛指我会使用sql.Null***来表示

要点

从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取;或者使用IFNULL、COALESCE等命令让数据库查询值返回不为”“或者NULL

若需要往数据库中插入null值,则依然可以使用sql.NULL***存储所需的值,然后进行插入NULL值

直接使用sql.NULL***类型容易出现valid遗漏设置等问题,普通int、string与其转换时,请写几个简单的get、set函数

本demo使用的数据库表以及数据如下

mysql> desc person;

+------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| first_name | varchar(100) | NO | | NULL | |

| last_name | varchar(40) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+------------+--------------+------+-----+---------+----------------+

mysql> select * from person;

+----+------------+-----------+------+

| id | first_name | last_name | age |

+----+------------+-----------+------+

| 1 | yousa | NULL | NULL |

+----+------------+-----------+------+

mysql> show create table person;

+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| person | CREATE TABLE `person` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`first_name` varchar(100) NOT NULL,

`last_name` varchar(40) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |

+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

从数据库中读取NULL值

如果不作处理直接从数据库中读取NULL值到string/int,会发生如下错误错误

Scan NULL值到string的报错

sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值