Skip to content

Commit 0faffb1

Browse files
committed
AC-6921:Get default charset/collation based on mysql version
1 parent 81191c6 commit 0faffb1

File tree

1 file changed

+44
-13
lines changed
  • lib/internal/Magento/Framework/Setup/Declaration/Schema/Dto/Factories

1 file changed

+44
-13
lines changed

lib/internal/Magento/Framework/Setup/Declaration/Schema/Dto/Factories/Table.php

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
use Magento\Framework\App\ResourceConnection;
1010
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\DB\Adapter\SqlVersionProvider;
1112

1213
/**
1314
* Table DTO element factory.
@@ -21,29 +22,40 @@ class Table implements FactoryInterface
2122
public const DEFAULT_ENGINE = 'innodb';
2223

2324
/**
24-
* Default charset for SQL
25+
* @var ObjectManagerInterface
2526
*/
26-
public const DEFAULT_CHARSET = 'utf8';
27+
private ObjectManagerInterface $objectManager;
2728

2829
/**
29-
* Default collation
30+
* @var string
3031
*/
31-
public const DEFAULT_COLLATION = 'utf8_general_ci';
32+
private string $className;
3233

3334
/**
34-
* @var ObjectManagerInterface
35+
* @var ResourceConnection
3536
*/
36-
private $objectManager;
37+
private ResourceConnection $resourceConnection;
38+
39+
/** @var SqlVersionProvider|null */
40+
private ?SqlVersionProvider $sqlVersionProvider = null;
3741

3842
/**
39-
* @var string
43+
* @var array|string[]
4044
*/
41-
private $className;
45+
private static array $defaultCharset = [
46+
'10.4' => 'utf8',
47+
'10.6' => 'utf8mb3',
48+
'default' => 'utf8',
49+
];
4250

4351
/**
44-
* @var ResourceConnection
52+
* @var array|string[]
4553
*/
46-
private $resourceConnection;
54+
private static array $defaultCollation = [
55+
'10.4' => 'utf8_general_ci',
56+
'10.6' => 'utf8mb3_general_ci',
57+
'default' => 'utf8_general_ci',
58+
];
4759

4860
/**
4961
* Constructor.
@@ -55,11 +67,13 @@ class Table implements FactoryInterface
5567
public function __construct(
5668
ObjectManagerInterface $objectManager,
5769
ResourceConnection $resourceConnection,
58-
$className = \Magento\Framework\Setup\Declaration\Schema\Dto\Table::class
70+
$className = \Magento\Framework\Setup\Declaration\Schema\Dto\Table::class,
71+
$sqlVersionProvider = null
5972
) {
6073
$this->objectManager = $objectManager;
6174
$this->className = $className;
6275
$this->resourceConnection = $resourceConnection;
76+
$this->sqlVersionProvider = $sqlVersionProvider ?? $this->objectManager->get(SqlVersionProvider::class);
6377
}
6478

6579
/**
@@ -72,11 +86,11 @@ public function create(array $data)
7286
}
7387
//Prepare charset
7488
if (!isset($data['charset'])) {
75-
$data['charset'] = self::DEFAULT_CHARSET;
89+
$data['charset'] = $this->getDefaultCharset();
7690
}
7791
//Prepare collation
7892
if (!isset($data['collation'])) {
79-
$data['collation'] = self::DEFAULT_COLLATION;
93+
$data['collation'] = $this->getDefaultCollation();
8094
}
8195
//Prepare triggers
8296
if (!isset($data['onCreate'])) {
@@ -94,4 +108,21 @@ public function create(array $data)
94108

95109
return $this->objectManager->create($this->className, $data);
96110
}
111+
112+
/**
113+
* @return string
114+
*/
115+
private function getDefaultCharset(): string
116+
{
117+
return self::$defaultCharset[$this->sqlVersionProvider->getSqlVersion()] ?? self::$defaultCharset['default'];
118+
}
119+
120+
/**
121+
* @return string
122+
*/
123+
private function getDefaultCollation(): string
124+
{
125+
return self::$defaultCollation[$this->sqlVersionProvider->getSqlVersion()] ??
126+
self::$defaultCollation['default'];
127+
}
97128
}

0 commit comments

Comments
 (0)