// MySQL初始化 + 表前缀sm_(已修复GORM兼容报错) package core import ( "simple-memo/global" "time" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" ) // InitMysql 初始化MySQL数据库连接 func InitMysql() { // 从配置文件读取数据库信息 host := global.VP.GetString("mysql.host") port := global.VP.GetString("mysql.port") dbname := global.VP.GetString("mysql.dbname") username := global.VP.GetString("mysql.username") password := global.VP.GetString("mysql.password") // MySQL 连接字符串 dsn := username + ":" + password + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8mb4&parseTime=True&loc=Local" // 打开数据库连接,启用表前缀sm_ db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), // ========== 修复:正确设置表前缀,无报错 ========== NamingStrategy: schema.NamingStrategy{ TablePrefix: "sm_", // 所有表统一前缀:sm_ SingularTable: true, // 禁用表名复数(User → sm_user) }, }) if err != nil { panic("MySQL连接失败:" + err.Error()) } // 设置数据库连接池,支撑高并发 sqlDB, err := db.DB() if err != nil { panic("获取数据库连接失败:" + err.Error()) } sqlDB.SetMaxOpenConns(100) // 最大打开连接数 sqlDB.SetMaxIdleConns(20) // 最大空闲连接数 sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最长存活时间 // 赋值给全局DB变量 global.DB = db }