Convert all tables in database to utf8mb4. Fix #928

This commit is contained in:
joker-x 2020-08-26 06:54:18 +02:00
parent 90fb72fc6f
commit fcae585417
3 changed files with 24 additions and 6 deletions

View file

@ -128,7 +128,8 @@ mysql:
# The timezone configured on the MySQL server. This can be 'local', 'Z', or an offset in the form +HH:MM or -HH:MM # The timezone configured on the MySQL server. This can be 'local', 'Z', or an offset in the form +HH:MM or -HH:MM
# If the MySQL server runs on the same server as Mailtrain, use 'local' # If the MySQL server runs on the same server as Mailtrain, use 'local'
timezone: local timezone: local
multipleStatements: true
verp: verp:
# Enable to start an MX server that detects bounced messages using VERP # Enable to start an MX server that detects bounced messages using VERP
# In most cases you do not want to use it # In most cases you do not want to use it

View file

@ -207,13 +207,13 @@ async function create(context, entity) {
await knex.schema.raw('CREATE TABLE `subscription__' + id + '` (\n' + await knex.schema.raw('CREATE TABLE `subscription__' + id + '` (\n' +
' `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n' + ' `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n' +
' `cid` varchar(255) CHARACTER SET ascii NOT NULL,\n' + ' `cid` varchar(255) NOT NULL,\n' +
' `email` varchar(255) CHARACTER SET utf8 DEFAULT NULL,\n' + ' `email` varchar(255) DEFAULT NULL,\n' +
' `hash_email` varchar(255) CHARACTER SET ascii NOT NULL,\n' + ' `hash_email` varchar(255) NOT NULL,\n' +
' `source_email` int(11) DEFAULT NULL,\n' + // Altough this is a reference to an import, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource ' `source_email` int(11) DEFAULT NULL,\n' + // Altough this is a reference to an import, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource
' `opt_in_ip` varchar(100) DEFAULT NULL,\n' + ' `opt_in_ip` varchar(100) DEFAULT NULL,\n' +
' `opt_in_country` varchar(2) DEFAULT NULL,\n' + ' `opt_in_country` varchar(2) DEFAULT NULL,\n' +
' `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL,\n' + ' `tz` varchar(100) DEFAULT NULL,\n' +
' `status` tinyint(4) unsigned NOT NULL DEFAULT \'1\',\n' + ' `status` tinyint(4) unsigned NOT NULL DEFAULT \'1\',\n' +
' `is_test` tinyint(4) unsigned NOT NULL DEFAULT \'0\',\n' + ' `is_test` tinyint(4) unsigned NOT NULL DEFAULT \'0\',\n' +
' `status_change` timestamp NULL DEFAULT NULL,\n' + ' `status_change` timestamp NULL DEFAULT NULL,\n' +
@ -233,7 +233,7 @@ async function create(context, entity) {
' KEY `latest_click` (`latest_click`),\n' + ' KEY `latest_click` (`latest_click`),\n' +
' KEY `created` (`created`),\n' + ' KEY `created` (`created`),\n' +
' KEY `updated` (`updated`)\n' + ' KEY `updated` (`updated`)\n' +
') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n'); ') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;\n');
await shares.rebuildPermissionsTx(tx, { entityTypeId: 'list', entityId: id }); await shares.rebuildPermissionsTx(tx, { entityTypeId: 'list', entityId: id });

View file

@ -0,0 +1,17 @@
exports.up = function(knex, Promise) {
return knex.raw('SELECT table_name FROM information_schema.tables WHERE table_schema = ?', [knex.client.database()])
.then(function(tablas) {
let sql="";
tablas=tablas[0];
for(let i=0; i<tablas.length; i++) {
sql+="ALTER TABLE "+tablas[i].table_name+" CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;";
}
//console.log(sql);
return knex.raw(sql);
});
};
exports.down = function(knex, Promise) {
};