https://gorm.io/docs/connecting_to_the_database.html

1.MySQL:

<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  <span class="string">&quot;gorm.io/driver/mysql&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> {</span>
<span class="line">  <span class="comment">// refer https://github.com/go-sql-driver/mysql#dsn-data-source-name for details</span></span>
<span class="line">  dsn := <span class="string">&quot;user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&amp;parseTime=True&amp;loc=Local&quot;</span></span>
<span class="line">  db, err := gorm.Open(mysql.Open(dsn), &amp;gorm.Config{})</span>
<span class="line">}</span>

MySQL Driver 提供了一些可在初始化期间使用的高级配置,例如:

MySQL Driver provides a few advanced configurations which can be used during initialization, for example:

<span class="line">db, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line">  DSN: <span class="string">&quot;gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&amp;parseTime=True&amp;loc=Local&quot;</span>, <span class="comment">// data source name</span></span>
<span class="line">  DefaultStringSize: <span class="number">256</span>, <span class="comment">// default size for string fields</span></span>
<span class="line">  DisableDatetimePrecision: <span class="literal">true</span>, <span class="comment">// disable datetime precision, which not supported before MySQL 5.6</span></span>
<span class="line">  DontSupportRenameIndex: <span class="literal">true</span>, <span class="comment">// drop &amp; create when rename index, rename index not supported before MySQL 5.7, MariaDB</span></span>
<span class="line">  DontSupportRenameColumn: <span class="literal">true</span>, <span class="comment">// `change` when rename column, rename column not supported before MySQL 8, MariaDB</span></span>
<span class="line">  SkipInitializeWithVersion: <span class="literal">false</span>, <span class="comment">// auto configure based on currently MySQL version</span></span>
<span class="line">}), &amp;gorm.Config{})</span>

NOTE:
To handle

time.Time
correctly, you need to include
parseTime
as a parameter. (more parameters)
To fully support UTF-8 encoding, you need to change
charset=utf8
to
charset=utf8mb4
. See this article for a detailed explanation

GORM 允许使用 DriverName 选项自定义 MySQL 驱动程序,例如:

<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  _ <span class="string">&quot;example.com/my_mysql_driver&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/driver/mysql&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line">db, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line">  DriverName: <span class="string">&quot;my_mysql_driver&quot;</span>,</span>
<span class="line">  DSN: <span class="string">&quot;gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&amp;parseTime=True&amp;loc=Local&quot;</span>, <span class="comment">// data source name, refer https://github.com/go-sql-driver/mysql#dsn-data-source-name</span></span>
<span class="line">}), &amp;gorm.Config{})</span>

对于已经存在的数据库的连接:

GORM allows to initialize *gorm.DB with an existing database connection
<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  <span class="string">&quot;database/sql&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/driver/mysql&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line">sqlDB, err := sql.Open(<span class="string">&quot;mysql&quot;</span>, <span class="string">&quot;mydb_dsn&quot;</span>)</span>
<span class="line">gormDB, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line">  Conn: sqlDB,</span>
<span class="line">}), &amp;gorm.Config{})</span>

2.postgres连接:

<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  <span class="string">&quot;gorm.io/driver/postgres&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line">dsn := <span class="string">&quot;host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai&quot;</span></span>
<span class="line">db, err := gorm.Open(postgres.Open(dsn), &amp;gorm.Config{})</span>

我们使用 pgx 作为 postgres 的数据库/sql 驱动程序,它默认启用准备好的语句缓存,禁用它:

We are using pgx as postgres’s database/sql driver, it enables prepared statement cache by default, to disable it:

<span class="line"><span class="comment">// https://github.com/go-gorm/postgres</span></span>
<span class="line">db, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line">  DSN: <span class="string">&quot;user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai&quot;</span>,</span>
<span class="line">  PreferSimpleProtocol: <span class="literal">true</span>, <span class="comment">// disables implicit prepared statement usage</span></span>
<span class="line">}), &amp;gorm.Config{})</span>

GORM 允许使用 DriverName 选项自定义 PostgreSQL 驱动程序,例如:

<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  _ <span class="string">&quot;github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line">db, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line">  DriverName: <span class="string">&quot;cloudsqlpostgres&quot;</span>,</span>
<span class="line">  DSN: <span class="string">&quot;host=project:region:instance user=postgres dbname=postgres password=password sslmode=disable&quot;</span>,</span>
<span class="line">})</span>

对于已经存在的数据库的连接:

GORM allows to initialize *gorm.DB with an existing database connection

<span class="line"><span class="keyword">import</span> (</span>
<span class="line">  <span class="string">&quot;database/sql&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/driver/postgres&quot;</span></span>
<span class="line">  <span class="string">&quot;gorm.io/gorm&quot;</span></span>
<span class="line">)</span>
<span class="line">sqlDB, err := sql.Open(<span class="string">&quot;pgx&quot;</span>, <span class="string">&quot;mydb_dsn&quot;</span>)</span>
<span class="line">gormDB, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line">  Conn: sqlDB,</span>
<span class="line">}), &amp;gorm.Config{})</span>