forked from gitea/gitea
		
	Add command to convert mysql database from utf8 to utf8mb4 (#7144)
* add command to convert mysql database from utf8 to utf8mb4 * Update cmd/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update cmd/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update cmd/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update models/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update models/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update cmd/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com> * Update cmd/convert.go Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									6fb31a5461
								
							
						
					
					
						commit
						23a2ee3510
					
				
							
								
								
									
										49
									
								
								cmd/convert.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								cmd/convert.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 
 | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| // CmdConvert represents the available convert sub-command. | ||||
| var CmdConvert = cli.Command{ | ||||
| 	Name:        "convert", | ||||
| 	Usage:       "Convert the database", | ||||
| 	Description: "A command to convert an existing MySQL database from utf8 to utf8mb4", | ||||
| 	Action:      runConvert, | ||||
| } | ||||
| 
 | ||||
| func runConvert(ctx *cli.Context) error { | ||||
| 	if err := initDB(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	log.Trace("AppPath: %s", setting.AppPath) | ||||
| 	log.Trace("AppWorkPath: %s", setting.AppWorkPath) | ||||
| 	log.Trace("Custom path: %s", setting.CustomPath) | ||||
| 	log.Trace("Log path: %s", setting.LogRootPath) | ||||
| 	models.LoadConfigs() | ||||
| 
 | ||||
| 	if models.DbCfg.Type != "mysql" { | ||||
| 		fmt.Println("This command can only be used with a MySQL database") | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if err := models.ConvertUtf8ToUtf8mb4(); err != nil { | ||||
| 		log.Fatal("Failed to convert database from utf8 to utf8mb4: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	fmt.Println("Converted successfully, please confirm your database's character set is now utf8mb4") | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										1
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.go
									
									
									
									
									
								
							| @ -67,6 +67,7 @@ arguments - which can alternatively be run by running the subcommand web.` | ||||
| 		cmd.CmdGenerate, | ||||
| 		cmd.CmdMigrate, | ||||
| 		cmd.CmdKeys, | ||||
| 		cmd.CmdConvert, | ||||
| 	} | ||||
| 	// Now adjust these commands to add our global configuration options | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										27
									
								
								models/convert.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								models/convert.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package models | ||||
| 
 | ||||
| import "fmt" | ||||
| 
 | ||||
| // ConvertUtf8ToUtf8mb4 converts database and tables from utf8 to utf8mb4 if it's mysql | ||||
| func ConvertUtf8ToUtf8mb4() error { | ||||
| 	_, err := x.Exec(fmt.Sprintf("ALTER DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", DbCfg.Name)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	tables, err := x.DBMetas() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for _, table := range tables { | ||||
| 		if _, err := x.Exec(fmt.Sprintf("ALTER TABLE `%s` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;", table.Name)); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 GitHub
							GitHub