数据库:
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255) UNIQUE, `password` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users` FROM `nrforms`
Executing (default): CREATE TABLE IF NOT EXISTS `tests` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) UNIQUE, `description` TEXT, `picture` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `tests` FROM `nrforms`
Executing (default): CREATE TABLE IF NOT EXISTS `questions` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `test_id` INTEGER, `testId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`test_id`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`testId`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `questions` FROM `nrforms`
使用gorm从数据库中获取记录,然后
column: name
value: NULL
错误:
var name string
if name != nil {
//
}
是的,nil在go中用于int类型,但是在这种情况下,数据库中的值为invalid operation: name != nil (mismatched types string and nil)
而不是NULL
,因此有必要检查""
,该怎么做?
答案 0 :(得分:2)
您应该注意sql类型:https://golang.org/pkg/database/sql/#NullString
只需在您的select语句中使用这种类型的变量:
var yourstr sql.NullString
db.Select("Select your string", &yourstr)
然后您可以检查它是否有效,如果不是,则可以分配所需的任何值:
if !yourstr.Valid{
yourstr.String = ""
}
在gorm中,还可以选择NullString:
yourstr := dbmap.SelectNullStr("Select your string")
答案 1 :(得分:1)
您还可以使用指向字符串的指针来映射数据库中的NULL值,但这会导致您在没有先创建变量的情况下无法给出值的情况。
var name *string
if name != nil {
//
}
// but
name = "will not work"
或者您可以使用github.com/go-sql-driver/mysql
(或您使用的任何驱动程序)和database/sql
包实现。
如果要添加功能,可以基于这些类型定义自己的类型:
// NullInt64 is an alias for sql.NullInt64 data type
type NullInt64 sql.NullInt64
// NullBool is an alias for sql.NullBool data type
type NullBool sql.NullBool
// NullFloat64 is an alias for sql.NullFloat64 data type
type NullFloat64 sql.NullFloat64
// NullString is an alias for sql.NullString data type
type NullString sql.NullString
// NullTime is an alias for mysql.NullTime data type
type NullTime mysql.NullTime