🐛 Add Migration for MySQL to certify that we're using the correct collation (#1905)

* Migration for MySQL to certify that we're using the correct collation

* Update migration to check for collation existence before running

*  Fix format

Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
Omar Ajoue 2021-06-18 23:57:58 +02:00 committed by GitHub
parent f8fcf0c165
commit 4dbf64b1a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 0 deletions

View file

@ -0,0 +1,44 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
import config = require('../../../../config');
export class CertifyCorrectCollation1623936588000 implements MigrationInterface {
name = 'CertifyCorrectCollation1623936588000';
async up(queryRunner: QueryRunner): Promise<void> {
const tablePrefix = config.get('database.tablePrefix');
const databaseType = config.get('database.type');
if (databaseType === 'mariadb') {
// This applies to MySQL only.
return;
}
const checkCollationExistence = await queryRunner.query(`show collation where collation like 'utf8mb4_0900_ai_ci';`);
let collation = 'utf8mb4_general_ci';
if (checkCollationExistence.length > 0) {
collation = 'utf8mb4_0900_ai_ci';
}
const databaseName = config.get(`database.mysqldb.database`);
await queryRunner.query(`ALTER DATABASE \`${databaseName}\` CHARACTER SET utf8mb4 COLLATE ${collation};`);
for (const tableName of [
'credentials_entity',
'execution_entity',
'tag_entity',
'webhook_entity',
'workflow_entity',
'workflows_tags',
]) {
await queryRunner.query(`ALTER TABLE ${tablePrefix}${tableName} CONVERT TO CHARACTER SET utf8mb4 COLLATE ${collation};`);
}
}
async down(queryRunner: QueryRunner): Promise<void> {
// There is nothing to undo in this case as we already expect default collation to be utf8mb4
// This migration exists simply to enforce that n8n will work with
// older mysql versions
}
}

View file

@ -7,6 +7,7 @@ import { ChangeDataSize1615306975123 } from './1615306975123-ChangeDataSize';
import { ChangeCredentialDataSize1620729500000 } from './1620729500000-ChangeCredentialDataSize';
import { CreateTagEntity1617268711084 } from './1617268711084-CreateTagEntity';
import { UniqueWorkflowNames1620826335440 } from './1620826335440-UniqueWorkflowNames';
import { CertifyCorrectCollation1623936588000 } from './1623936588000-CertifyCorrectCollation';
export const mysqlMigrations = [
InitialMigration1588157391238,
@ -18,4 +19,5 @@ export const mysqlMigrations = [
ChangeCredentialDataSize1620729500000,
CreateTagEntity1617268711084,
UniqueWorkflowNames1620826335440,
CertifyCorrectCollation1623936588000,
];