mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-22 08:16:09 +08:00
[cloud-*] Switch MySQL charset to utf8mb4
Summary: We need this in order to be able to store 4-byte emoji and other extended unicode characters in the database. Test Plan: deploy to staging - need the change that sets the connection charset on staging :( Reviewers: khamidou, juan, evan Reviewed By: juan, evan Differential Revision: https://phab.nylas.com/D4387
This commit is contained in:
parent
3074ee2912
commit
d09312c27f
|
@ -27,4 +27,5 @@ module.exports = {
|
||||||
executeJasmine: require('./spec/jasmine/execute').default,
|
executeJasmine: require('./spec/jasmine/execute').default,
|
||||||
StringUtils: require('./src/string-utils'),
|
StringUtils: require('./src/string-utils'),
|
||||||
TLSUtils: require('./src/tls-utils'),
|
TLSUtils: require('./src/tls-utils'),
|
||||||
|
DBUtils: require('./src/db-utils'),
|
||||||
}
|
}
|
||||||
|
|
11
packages/isomorphic-core/src/db-utils.es6
Normal file
11
packages/isomorphic-core/src/db-utils.es6
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// In order to be able to represent 4-byte characters such as some emoji, we
|
||||||
|
// must use the 'utf8mb4' character set on MySQL. Any table using this
|
||||||
|
// character set can't have indexes on fields longer than this length without
|
||||||
|
// triggering the error
|
||||||
|
//
|
||||||
|
// ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
|
||||||
|
//
|
||||||
|
// (or, without sql_mode = TRADITIONAL - getting silently truncated!)
|
||||||
|
const MAX_INDEXABLE_LENGTH = 191;
|
||||||
|
|
||||||
|
export {MAX_INDEXABLE_LENGTH};
|
|
@ -2,6 +2,7 @@ const crypto = require('crypto');
|
||||||
|
|
||||||
const {JSONColumn, JSONArrayColumn} = require('../database-types');
|
const {JSONColumn, JSONArrayColumn} = require('../database-types');
|
||||||
const {credentialsForProvider, smtpConfigFromSettings} = require('../auth-helpers');
|
const {credentialsForProvider, smtpConfigFromSettings} = require('../auth-helpers');
|
||||||
|
const {MAX_INDEXABLE_LENGTH} = require('../db-utils');
|
||||||
|
|
||||||
|
|
||||||
const {DB_ENCRYPTION_ALGORITHM, DB_ENCRYPTION_PASSWORD} = process.env;
|
const {DB_ENCRYPTION_ALGORITHM, DB_ENCRYPTION_PASSWORD} = process.env;
|
||||||
|
@ -11,7 +12,7 @@ module.exports = (sequelize, Sequelize) => {
|
||||||
id: { type: Sequelize.STRING(65), primaryKey: true },
|
id: { type: Sequelize.STRING(65), primaryKey: true },
|
||||||
name: Sequelize.STRING,
|
name: Sequelize.STRING,
|
||||||
provider: Sequelize.STRING,
|
provider: Sequelize.STRING,
|
||||||
emailAddress: Sequelize.STRING,
|
emailAddress: Sequelize.STRING(MAX_INDEXABLE_LENGTH),
|
||||||
connectionSettings: JSONColumn('connectionSettings'),
|
connectionSettings: JSONColumn('connectionSettings'),
|
||||||
connectionCredentials: Sequelize.TEXT,
|
connectionCredentials: Sequelize.TEXT,
|
||||||
syncPolicy: JSONColumn('syncPolicy'),
|
syncPolicy: JSONColumn('syncPolicy'),
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
const {JSONArrayColumn} = require('../database-types');
|
const {JSONArrayColumn} = require('../database-types');
|
||||||
|
const {MAX_INDEXABLE_LENGTH} = require('../db-utils');
|
||||||
|
|
||||||
module.exports = (sequelize, Sequelize) => {
|
module.exports = (sequelize, Sequelize) => {
|
||||||
return sequelize.define('transaction', {
|
return sequelize.define('transaction', {
|
||||||
event: Sequelize.STRING,
|
event: Sequelize.STRING(MAX_INDEXABLE_LENGTH),
|
||||||
object: Sequelize.STRING,
|
object: Sequelize.STRING(MAX_INDEXABLE_LENGTH),
|
||||||
objectId: Sequelize.STRING,
|
objectId: Sequelize.STRING(MAX_INDEXABLE_LENGTH),
|
||||||
accountId: Sequelize.STRING,
|
accountId: Sequelize.STRING(MAX_INDEXABLE_LENGTH),
|
||||||
changedFields: JSONArrayColumn('changedFields'),
|
changedFields: JSONArrayColumn('changedFields'),
|
||||||
}, {
|
}, {
|
||||||
indexes: [
|
indexes: [
|
||||||
|
|
Loading…
Reference in a new issue