To prevent errors upon migration.
Command generates out the SQL syntax to make the change instead
so the upgrade can be done manually.
In reference to #425
--- /dev/null
+<?php
+
+namespace BookStack\Console\Commands;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+
+class UpgradeDatabaseEncoding extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'bookstack:db-utf8mb4-syntax {--database= : The database connection to use.}';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Generate SQL commands to upgrade the database to UTF8mb4';
+
+ /**
+ * Create a new command instance.
+ *
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ */
+ public function handle()
+ {
+ $connection = DB::getDefaultConnection();
+ if ($this->option('database') !== null) {
+ DB::setDefaultConnection($this->option('database'));
+ }
+
+ $database = DB::getDatabaseName();
+ $tables = DB::select('SHOW TABLES');
+ $this->line('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+ $this->line('USE `'.$database.'`;');
+ $key = 'Tables_in_' . $database;
+ foreach ($tables as $table) {
+ $tableName = $table->$key;
+ $this->line('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+ }
+
+ DB::setDefaultConnection($connection);
+ }
+}
Commands\ClearActivity::class,
Commands\ClearRevisions::class,
Commands\RegeneratePermissions::class,
- Commands\RegenerateSearch::class
+ Commands\RegenerateSearch::class,
+ Commands\UpgradeDatabaseEncoding::class
];
/**
<?php
-use Illuminate\Support\Facades\Schema;
-use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class UpdateDbEncodingToUt8mb4 extends Migration
*/
public function up()
{
- $database = DB::getDatabaseName();
- $tables = DB::select('SHOW TABLES');
- $pdo = DB::getPdo();
- $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
- $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
- $key = 'Tables_in_' . $database;
- foreach ($tables as $table) {
- $tableName = $table->$key;
- $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
- }
+ // Migration removed due to issues during live migration.
+ // Instead you can run the command `artisan bookstack:db-utf8mb4-syntax`
+ // which will generate out the SQL request to upgrade your DB to utf8mb4.
}
/**
*/
public function down()
{
- $database = DB::getDatabaseName();
- $tables = DB::select('SHOW TABLES');
- $pdo = DB::getPdo();
- $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
- $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8 COLLATE utf8_unicode_ci');
- $key = 'Tables_in_' . $database;
- foreach ($tables as $table) {
- $tableName = $table->$key;
- $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci');
- }
+ //
}
}