Fix encoding on configuration tables. (#13296)

Этот коммит содержится в:
Christopher Speller
2019-12-20 15:31:03 -08:00
коммит произвёл GitHub
родитель e48d093d01
Коммит fdd1ae974f

Просмотреть файл

@@ -70,6 +70,11 @@ func NewDatabaseStore(dsn string) (ds *DatabaseStore, err error) {
// //
// Uses MEDIUMTEXT on MySQL, and TEXT on sane databases. // Uses MEDIUMTEXT on MySQL, and TEXT on sane databases.
func initializeConfigurationsTable(db *sqlx.DB) error { func initializeConfigurationsTable(db *sqlx.DB) error {
mysqlCharset := ""
if db.DriverName() == "mysql" {
mysqlCharset = "DEFAULT CHARACTER SET utf8mb4"
}
_, err := db.Exec(` _, err := db.Exec(`
CREATE TABLE IF NOT EXISTS Configurations ( CREATE TABLE IF NOT EXISTS Configurations (
Id VARCHAR(26) PRIMARY KEY, Id VARCHAR(26) PRIMARY KEY,
@@ -77,7 +82,8 @@ func initializeConfigurationsTable(db *sqlx.DB) error {
CreateAt BIGINT NOT NULL, CreateAt BIGINT NOT NULL,
Active BOOLEAN NULL UNIQUE Active BOOLEAN NULL UNIQUE
) )
`) ` + mysqlCharset)
if err != nil { if err != nil {
return errors.Wrap(err, "failed to create Configurations table") return errors.Wrap(err, "failed to create Configurations table")
} }
@@ -89,23 +95,32 @@ func initializeConfigurationsTable(db *sqlx.DB) error {
CreateAt BIGINT NOT NULL, CreateAt BIGINT NOT NULL,
UpdateAt BIGINT NOT NULL UpdateAt BIGINT NOT NULL
) )
`) ` + mysqlCharset)
if err != nil { if err != nil {
return errors.Wrap(err, "failed to create ConfigurationFiles table") return errors.Wrap(err, "failed to create ConfigurationFiles table")
} }
// Change from TEXT (65535 limit) to MEDIUM TEXT (16777215) on MySQL. This is a // Change from TEXT (65535 limit) to MEDIUM TEXT (16777215) on MySQL. This is a
// backwards-compatible migration for any existing schema. // backwards-compatible migration for any existing schema.
// Also fix using the wrong encoding initally
if db.DriverName() == "mysql" { if db.DriverName() == "mysql" {
_, err = db.Exec(`ALTER TABLE Configurations MODIFY Value MEDIUMTEXT`) _, err = db.Exec(`ALTER TABLE Configurations MODIFY Value MEDIUMTEXT`)
if err != nil { if err != nil {
return errors.Wrap(err, "failed to alter Configurations table") return errors.Wrap(err, "failed to alter Configurations table")
} }
_, err = db.Exec(`ALTER TABLE Configurations CONVERT TO CHARACTER SET utf8mb4`)
if err != nil {
return errors.Wrap(err, "failed to alter Configurations table character set")
}
_, err = db.Exec(`ALTER TABLE ConfigurationFiles MODIFY Data MEDIUMTEXT`) _, err = db.Exec(`ALTER TABLE ConfigurationFiles MODIFY Data MEDIUMTEXT`)
if err != nil { if err != nil {
return errors.Wrap(err, "failed to alter ConfigurationFiles table") return errors.Wrap(err, "failed to alter ConfigurationFiles table")
} }
_, err = db.Exec(`ALTER TABLE ConfigurationFiles CONVERT TO CHARACTER SET utf8mb4`)
if err != nil {
return errors.Wrap(err, "failed to alter ConfigurationFiles table character set")
}
} }
return nil return nil