Skip to content

Commit 4e44b2d

Browse files
committed
AC-9755:Set default collation to utf8mb4 for MySQL
1 parent 1b42f8c commit 4e44b2d

File tree

1 file changed

+41
-33
lines changed

1 file changed

+41
-33
lines changed

setup/src/Magento/Setup/Model/Installer.php

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
use Magento\Store\Model\Store;
6161
use Magento\RemoteStorage\Setup\ConfigOptionsList as RemoteStorageValidator;
6262
use ReflectionException;
63+
use Magento\Framework\Setup\Declaration\Schema\Dto\Factories\Table as DtoFactoriesTable;
6364

6465
/**
6566
* Class Installer contains the logic to install Magento application.
@@ -259,26 +260,15 @@ class Installer
259260
*/
260261
private $triggerCleaner;
261262

262-
/***
263-
* Charset for cl tables
264-
*/
265-
private const CHARSET = 'utf8mb4';
266-
267-
/***
268-
* Collation for cl tables
269-
*/
270-
private const COLLATION = 'utf8mb4_general_ci';
271-
272263
/***
273264
* Old Charset for cl tables
274265
*/
275266
private const OLDCHARSET = 'utf8mb3';
276267

277268
/***
278-
* Charset and collation for column level
279-
* Adding charset and collation for DBC failures
269+
* @var DtoFactoriesTable
280270
*/
281-
private const COLUMN_ENCODING = " CHARACTER SET ".self::CHARSET." COLLATE ".self::COLLATION;
271+
private $columnConfig;
282272

283273
/**
284274
* Constructor
@@ -304,6 +294,7 @@ class Installer
304294
* @param State $sampleDataState
305295
* @param ComponentRegistrar $componentRegistrar
306296
* @param PhpReadinessCheck $phpReadinessCheck
297+
* @param DtoFactoriesTable $dtoFactoriesTable
307298
* @throws Exception
308299
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
309300
*/
@@ -328,7 +319,8 @@ public function __construct(
328319
DataSetupFactory $dataSetupFactory,
329320
State $sampleDataState,
330321
ComponentRegistrar $componentRegistrar,
331-
PhpReadinessCheck $phpReadinessCheck
322+
PhpReadinessCheck $phpReadinessCheck,
323+
DtoFactoriesTable $dtoFactoriesTable
332324
) {
333325
$this->filePermissions = $filePermissions;
334326
$this->deploymentConfigWriter = $deploymentConfigWriter;
@@ -359,6 +351,7 @@ public function __construct(
359351
* from that ObjectManager gets reset as different steps in the installer will write to the deployment config.
360352
*/
361353
$this->firstDeploymentConfig = ObjectManager::getInstance()->get(DeploymentConfig::class);
354+
$this->columnConfig = $dtoFactoriesTable;
362355
}
363356

364357
/**
@@ -669,18 +662,21 @@ private function setupModuleRegistry(SchemaSetupInterface $setup)
669662
// change the charset to utf8mb4
670663
$getTableSchema = $connection->getCreateTable($setup->getTable('setup_module')) ?? '';
671664
if (str_contains($getTableSchema, self::OLDCHARSET)) {
665+
$charset = $this->columnConfig->getDefaultCharset();
666+
$collate = $this->columnConfig->getDefaultCollation();
667+
$columnEncoding = " CHARACTER SET ".$charset." COLLATE ".$collate;
672668
$connection->query(
673669
sprintf(
674670
'ALTER TABLE `%s` MODIFY COLUMN `module` varchar(50) %s,
675671
MODIFY COLUMN `schema_version` varchar(50) %s,
676672
MODIFY COLUMN `data_version` varchar(50) %s,
677673
DEFAULT CHARSET=%s, DEFAULT COLLATE=%s',
678674
$setup->getTable('setup_module'),
679-
self::COLUMN_ENCODING,
680-
self::COLUMN_ENCODING,
681-
self::COLUMN_ENCODING,
682-
self::CHARSET,
683-
self::COLLATION
675+
$columnEncoding,
676+
$columnEncoding,
677+
$columnEncoding,
678+
$charset,
679+
$collate
684680
)
685681
);
686682
}
@@ -747,14 +743,17 @@ private function setupSessionTable(
747743
// change the charset to utf8mb4
748744
$getTableSchema = $connection->getCreateTable($setup->getTable('session')) ?? '';
749745
if (str_contains($getTableSchema, self::OLDCHARSET)) {
746+
$charset = $this->columnConfig->getDefaultCharset();
747+
$collate = $this->columnConfig->getDefaultCollation();
748+
$columnEncoding = " CHARACTER SET ".$charset." COLLATE ".$collate;
750749
$connection->query(
751750
sprintf(
752751
'ALTER TABLE `%s` MODIFY COLUMN `session_id` varchar(255) %s ,
753752
DEFAULT CHARSET=%s, DEFAULT COLLATE=%s',
754753
$setup->getTable('session'),
755-
self::COLUMN_ENCODING,
756-
self::CHARSET,
757-
self::COLLATION
754+
$columnEncoding,
755+
$charset,
756+
$collate
758757
)
759758
);
760759
}
@@ -817,14 +816,17 @@ private function setupCacheTable(
817816
// change the charset to utf8mb4
818817
$getTableSchema = $connection->getCreateTable($setup->getTable('cache')) ?? '';
819818
if (str_contains($getTableSchema, self::OLDCHARSET)) {
819+
$charset = $this->columnConfig->getDefaultCharset();
820+
$collate = $this->columnConfig->getDefaultCollation();
821+
$columnEncoding = " CHARACTER SET ".$charset." COLLATE ".$collate;
820822
$connection->query(
821823
sprintf(
822824
'ALTER TABLE `%s` MODIFY COLUMN `id` varchar(200) %s,
823825
DEFAULT CHARSET=%s, DEFAULT COLLATE=%s',
824826
$setup->getTable('cache'),
825-
self::COLUMN_ENCODING,
826-
self::CHARSET,
827-
self::COLLATION
827+
$columnEncoding,
828+
$charset,
829+
$collate
828830
)
829831
);
830832
}
@@ -869,15 +871,18 @@ private function setupCacheTagTable(
869871
// change the charset to utf8mb4
870872
$getTableSchema = $connection->getCreateTable($setup->getTable('cache_tag')) ?? '';
871873
if (str_contains($getTableSchema, self::OLDCHARSET)) {
874+
$charset = $this->columnConfig->getDefaultCharset();
875+
$collate = $this->columnConfig->getDefaultCollation();
876+
$columnEncoding = " CHARACTER SET ".$charset." COLLATE ".$collate;
872877
$connection->query(
873878
sprintf(
874879
'ALTER TABLE `%s` MODIFY COLUMN `tag` varchar(100) %s,
875880
MODIFY COLUMN `cache_id` varchar(200) %s, DEFAULT CHARSET=%s, DEFAULT COLLATE=%s',
876881
$setup->getTable('cache_tag'),
877-
self::COLUMN_ENCODING,
878-
self::COLUMN_ENCODING,
879-
self::CHARSET,
880-
self::COLLATION
882+
$columnEncoding,
883+
$columnEncoding,
884+
$charset,
885+
$collate
881886
)
882887
);
883888
}
@@ -942,15 +947,18 @@ private function setupFlagTable(
942947
// change the charset to utf8mb4
943948
$getTableSchema = $connection->getCreateTable($tableName) ?? '';
944949
if (str_contains($getTableSchema, self::OLDCHARSET)) {
950+
$charset = $this->columnConfig->getDefaultCharset();
951+
$collate = $this->columnConfig->getDefaultCollation();
952+
$columnEncoding = " CHARACTER SET ".$charset." COLLATE ".$collate;
945953
$connection->query(
946954
sprintf(
947955
'ALTER TABLE `%s` MODIFY COLUMN `flag_code` varchar(255) %s NOT NULL,
948956
MODIFY COLUMN `flag_data` mediumtext %s, DEFAULT CHARSET=%s, DEFAULT COLLATE=%s',
949957
$setup->getTable('flag'),
950-
self::COLUMN_ENCODING,
951-
self::COLUMN_ENCODING,
952-
self::CHARSET,
953-
self::COLLATION
958+
$columnEncoding,
959+
$columnEncoding,
960+
$charset,
961+
$collate
954962
)
955963
);
956964
}

0 commit comments

Comments
 (0)