创建新方言
GORM 官方支持以下几种方言:sqlite
, mysql
, postgres
, mssql
.
你可以通过创建一个新的方言来为其它数据库提供支持。 当你创建一个新方言的时候,你必须实现 the dialect interface 接口。
某些数据库可能兼容 mysql
或 postgres
方言,此时你可以直接使用现有方言。
方言的特殊类型
某些 SQL 的方言包含特殊的、非标准的类型,比如 PostgreSQL 中的 jsonb
类型。 GORM 支持其中的几种类型,如下所示。
PostgreSQL
GORM 支持加载以下 PostgreSQL 特有类型: - jsonb - hstore
Model 定义如下:
import (
"encoding/json"
"github.com/jinzhu/gorm/dialects/postgres"
)
type Document struct {
Metadata postgres.Jsonb
Secrets postgres.Hstore
Body string
ID int
}
你可以这样使用 model:
password := "0654857340"
metadata := json.RawMessage(`{"is_archived": 0}`)
sampleDoc := Document{
Body: "This is a test document",
Metadata: postgres.Jsonb{ RawMessage: metadata },
Secrets: postgres.Hstore{"password": &password},
}
// 将 sampleDoc 添加到数据库
db.Create(&sampleDoc)
// 再次检索字段,以确保它们是否已经正确添加
resultDoc := Document{}
db.Where("id = ?", sampleDoc.ID).First(&resultDoc)
metadataIsEqual := reflect.DeepEqual(resultDoc.Metadata, sampleDoc.Metadata)
secretsIsEqual := reflect.DeepEqual(resultDoc.Secrets, sampleDoc.Secrets)
// 打印结果应该是 "true"
fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual)