mysql - golang mysql DESCRIBE表导致driver.Value type nil错误

标签 mysql go

我第一次尝试使用 golang 查询 MySQL 数据库,但是当我运行命令 go run main.go 时出现以下错误。

2017/10/22 21:06:58 sql: Scan error on column index 4: unsupported Scan, storing driver.Value type into type *string exit status 1

这是我的 main.go

主.go

package main

import (
    "log"
    "database/sql"
)

import _ "github.com/go-sql-driver/mysql"

var db *sql.DB
var err error

// main function to boot up everything
func main() {

    var dbField,dbType,dbNull,dbKey,dbDefault,dbExtra string

    // Create an sql.DB and check for errors
    db, err = sql.Open("mysql", "username:password@/mydatabase")
    if err != nil {
        panic(err.Error())
    }
    rows, err := db.Query("DESCRIBE t_user")
    if err != nil {
      log.Fatal(err)
    }
    defer rows.Close()
    for rows.Next() {
      err := rows.Scan(&dbField,&dbType,&dbNull,&dbKey,&dbDefault,&dbExtra)
      if err != nil {
        log.Fatal(err)
      }
      log.Println(dbField,dbType,dbNull,dbKey,dbDefault,dbExtra)
    }
    err = rows.Err()
    if err != nil {
      log.Fatal(err)
    }
    // sql.DB should be long lived "defer" closes it once this function ends
    defer db.Close()

}

当我从 mysql 终端运行 DESCRIBE t_user 时,我得到了这些结果:

+------------------------+---------------------+------+-----+---------+----------------+
| Field                  | Type                | Null | Key | Default | Extra          |
+------------------------+---------------------+------+-----+---------+----------------+
| user_id                | int(11) unsigned    | NO   | PRI | NULL    | auto_increment |
| first_name             | varchar(50)         | NO   |     | NULL    |                |
| middle_name            | varchar(50)         | NO   |     | NULL    |                |
| last_name              | varchar(50)         | NO   |     | NULL    |                |
| email                  | varchar(50)         | NO   | UNI | NULL    |                |
+------------------------+---------------------+------+-----+---------+----------------+

我似乎无法弄清楚是什么导致了这个问题。是因为 columns key, default, extra 有时会返回空字符串或 null 值吗?我尝试做类似 var dbNull nil 的操作,但编译器说 nil 不是类型,因此如果问题与 dbNull 相关,则需要接受可为空的值,golang 如何解决这种情况?如果这不是问题所在,我感谢任何其他见解

最佳答案

索引 4 是 Default 列,可以为空。你给它一个地址来放置一个字符串,但它需要放置 NULL。解决方案是使用类似 sql.NullString 的东西,而不仅仅是一个字符串。

关于mysql - golang mysql DESCRIBE表导致driver.Value type nil错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46880695/

相关文章:

pointers - 在golang中将一个指针转换为另一种类型

golang 中的 sqlite3,foreign_keys pragma 不强制键

c# - 使用 Windows 窗体更新 mysql 数据库总是给出奇怪的错误消息

mysql - 自连接查询值不匹配

go - Bigquery Golang 客户端获取项目列表

postgresql - 如何使用 go 在 PostgreSQL 中传递条件参数?

go - 眼镜蛇指挥官 : How to call a command from another command?

php - 在 xampp 上安装 cake php

MySQL删除尾随零

php - 循环从按关系排序和摸索的整个表中选择一个不同的行