Go 语言:解决数据库中 null 值的问题

本文主要介绍如何使用 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 使用的数据库表以及数据如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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,会发生如下错误错误 ...

October 8, 2020 · 5 min · 892 words · [厉辉(Yousa)]