安装和连接 MySQL

这一节创建一个最小 GORM 项目,并连接 MySQL。

一、创建项目

mkdir gorm-demo
cd gorm-demo
go mod init gorm-demo

二、安装 GORM 和 MySQL 驱动

go get gorm.io/gorm
go get gorm.io/driver/mysql

GORM 核心包:

gorm.io/gorm

MySQL 驱动:

gorm.io/driver/mysql

三、准备数据库

先在 MySQL 里创建数据库:

CREATE DATABASE IF NOT EXISTS gorm_tutorial
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_0900_ai_ci;

如果当前 MySQL 不支持 utf8mb4_0900_ai_ci,可以改成:

DEFAULT COLLATE utf8mb4_unicode_ci

四、连接 MySQL

创建 main.go

package main

import (
    "fmt"

    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/gorm_tutorial?charset=utf8mb4&parseTime=True&loc=Local"

    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("连接数据库失败: " + err.Error())
    }

    fmt.Println(db)
    fmt.Println("连接成功")
}

运行:

go run main.go

看到:

连接成功

说明 GORM 已经连接到 MySQL。

五、DSN 是什么

DSN 是数据库连接字符串。

root:123456@tcp(127.0.0.1:3306)/gorm_tutorial?charset=utf8mb4&parseTime=True&loc=Local

拆开看:

部分含义
root用户名
123456密码
127.0.0.1:3306MySQL 地址和端口
gorm_tutorial数据库名
charset=utf8mb4使用完整 Unicode 字符集
parseTime=True把 MySQL 时间字段解析成 Go 的 time.Time
loc=Local使用本地时区

parseTime=True 很重要。没有它,时间字段处理容易出问题。

六、不要把密码写死在代码里

示例为了简单直接写 DSN,真实项目不要这样写:

dsn := "root:123456@tcp(127.0.0.1:3306)/gorm_tutorial?charset=utf8mb4&parseTime=True&loc=Local"

应该从配置或环境变量读取:

dsn := os.Getenv("MYSQL_DSN")

环境变量示例:

MYSQL_DSN=root:123456@tcp(127.0.0.1:3306)/gorm_tutorial?charset=utf8mb4&parseTime=True&loc=Local

七、连接失败排查

1. 用户名或密码错误

常见报错:

Access denied for user

检查:

  • 用户名是否正确
  • 密码是否正确
  • 用户是否允许从当前主机连接

2. 数据库不存在

常见报错:

Unknown database

先创建数据库:

CREATE DATABASE gorm_tutorial DEFAULT CHARACTER SET utf8mb4;

3. MySQL 没启动

常见报错:

connect: connection refused

检查:

  • MySQL 服务是否启动
  • 端口是不是 3306
  • Docker 容器是否映射端口

八、下一步

连接成功后,就可以定义 Go 结构体,并让 GORM 创建数据表。