From cb3173a1e911127fb0095bcef261d9b5182d53c6 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Thu, 22 Jun 2023 13:38:23 +0800 Subject: [PATCH] Use "utf8mb4" for MySQL by default (#25432) TBH, I don't see much difference from `Remove "CHARSET" config option for MySQL, always use "utf8mb4"` #25413 Close #25413 --- modules/setting/database.go | 26 +++++++++++--------------- options/locale/locale_en-US.ini | 2 -- routers/install/install.go | 3 --- services/forms/user_form.go | 1 - templates/install.tmpl | 15 --------------- 5 files changed, 11 insertions(+), 36 deletions(-) diff --git a/modules/setting/database.go b/modules/setting/database.go index 7a7c7029a4..bb259f1fea 100644 --- a/modules/setting/database.go +++ b/modules/setting/database.go @@ -60,11 +60,6 @@ func LoadDBSetting() { func loadDBSetting(rootCfg ConfigProvider) { sec := rootCfg.Section("database") Database.Type = DatabaseType(sec.Key("DB_TYPE").String()) - defaultCharset := "utf8" - - if Database.Type.IsMySQL() { - defaultCharset = "utf8mb4" - } Database.Host = sec.Key("HOST").String() Database.Name = sec.Key("NAME").String() @@ -74,9 +69,10 @@ func loadDBSetting(rootCfg ConfigProvider) { } Database.Schema = sec.Key("SCHEMA").String() Database.SSLMode = sec.Key("SSL_MODE").MustString("disable") - Database.Charset = sec.Key("CHARSET").In(defaultCharset, []string{"utf8", "utf8mb4"}) - if Database.Type.IsMySQL() && defaultCharset != "utf8mb4" { - log.Error("Deprecated database mysql charset utf8 support, please use utf8mb4 or convert utf8 to utf8mb4.") + + Database.Charset = sec.Key("CHARSET").MustString("utf8mb4") + if Database.Type.IsMySQL() && Database.Charset != "utf8mb4" { + log.Error(`Deprecated database mysql charset utf8 support, please use utf8mb4 and convert utf8 database to utf8mb4 by "gitea convert".`) } Database.Path = sec.Key("PATH").MustString(filepath.Join(AppDataPath, "gitea.db")) @@ -101,9 +97,9 @@ func loadDBSetting(rootCfg ConfigProvider) { // DBConnStr returns database connection string func DBConnStr() (string, error) { var connStr string - Param := "?" - if strings.Contains(Database.Name, Param) { - Param = "&" + paramSep := "?" + if strings.Contains(Database.Name, paramSep) { + paramSep = "&" } switch Database.Type { case "mysql": @@ -116,15 +112,15 @@ func DBConnStr() (string, error) { tls = "false" } connStr = fmt.Sprintf("%s:%s@%s(%s)/%s%scharset=%s&parseTime=true&tls=%s", - Database.User, Database.Passwd, connType, Database.Host, Database.Name, Param, Database.Charset, tls) + Database.User, Database.Passwd, connType, Database.Host, Database.Name, paramSep, Database.Charset, tls) case "postgres": - connStr = getPostgreSQLConnectionString(Database.Host, Database.User, Database.Passwd, Database.Name, Param, Database.SSLMode) + connStr = getPostgreSQLConnectionString(Database.Host, Database.User, Database.Passwd, Database.Name, paramSep, Database.SSLMode) case "mssql": host, port := ParseMSSQLHostPort(Database.Host) connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, Database.Name, Database.User, Database.Passwd) case "sqlite3": if !EnableSQLite3 { - return "", errors.New("this binary version does not build support for SQLite3") + return "", errors.New("this Gitea binary was not built with SQLite3 support") } if err := os.MkdirAll(path.Dir(Database.Path), os.ModePerm); err != nil { return "", fmt.Errorf("Failed to create directories: %w", err) @@ -136,7 +132,7 @@ func DBConnStr() (string, error) { connStr = fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d&_txlock=immediate%s", Database.Path, Database.Timeout, journalMode) default: - return "", fmt.Errorf("Unknown database type: %s", Database.Type) + return "", fmt.Errorf("unknown database type: %s", Database.Type) } return connStr, nil diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 788582db95..d6eac9e5a5 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -192,11 +192,9 @@ host = Host user = Username password = Password db_name = Database Name -db_helper = Note to MySQL users: please use the InnoDB storage engine and if you use "utf8mb4", your InnoDB version must be greater than 5.6 . db_schema = Schema db_schema_helper = Leave blank for database default ("public"). ssl_mode = SSL -charset = Charset path = Path sqlite_helper = File path for the SQLite3 database.
Enter an absolute path if you run Gitea as a service. reinstall_error = You are trying to install into an existing Gitea database diff --git a/routers/install/install.go b/routers/install/install.go index 16bb55b685..b76b7fdc30 100644 --- a/routers/install/install.go +++ b/routers/install/install.go @@ -98,7 +98,6 @@ func Install(ctx *context.Context) { form.DbName = setting.Database.Name form.DbPath = setting.Database.Path form.DbSchema = setting.Database.Schema - form.Charset = setting.Database.Charset curDBType := setting.Database.Type.String() var isCurDBTypeSupported bool @@ -268,7 +267,6 @@ func SubmitInstall(ctx *context.Context) { setting.Database.Name = form.DbName setting.Database.Schema = form.DbSchema setting.Database.SSLMode = form.SSLMode - setting.Database.Charset = form.Charset setting.Database.Path = form.DbPath setting.Database.LogSQL = !setting.IsProd @@ -382,7 +380,6 @@ func SubmitInstall(ctx *context.Context) { cfg.Section("database").Key("PASSWD").SetValue(setting.Database.Passwd) cfg.Section("database").Key("SCHEMA").SetValue(setting.Database.Schema) cfg.Section("database").Key("SSL_MODE").SetValue(setting.Database.SSLMode) - cfg.Section("database").Key("CHARSET").SetValue(setting.Database.Charset) cfg.Section("database").Key("PATH").SetValue(setting.Database.Path) cfg.Section("database").Key("LOG_SQL").SetValue("false") // LOG_SQL is rarely helpful diff --git a/services/forms/user_form.go b/services/forms/user_form.go index 1315fb237b..0a3d76dd99 100644 --- a/services/forms/user_form.go +++ b/services/forms/user_form.go @@ -27,7 +27,6 @@ type InstallForm struct { DbPasswd string DbName string SSLMode string - Charset string `binding:"Required;In(utf8,utf8mb4)"` DbPath string DbSchema string diff --git a/templates/install.tmpl b/templates/install.tmpl index 52be6a6013..0ef1cd88b9 100644 --- a/templates/install.tmpl +++ b/templates/install.tmpl @@ -44,7 +44,6 @@
- {{.locale.Tr "install.db_helper"}}
@@ -69,20 +68,6 @@ -
-
- - -
-
-