32
32
use Magento \Framework \Stdlib \StringUtils ;
33
33
use Zend_Db_Adapter_Exception ;
34
34
use Zend_Db_Statement_Exception ;
35
+ use Magento \Framework \Setup \Declaration \Schema \Dto \Factories \Table as DtoFactoriesTable ;
35
36
36
37
// @codingStandardsIgnoreStart
37
38
@@ -273,13 +274,19 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface, Rese
273
274
*/
274
275
private $ mysqlversion ;
275
276
277
+ /***
278
+ * @var DtoFactoriesTable
279
+ */
280
+ private $ columnConfig ;
281
+
276
282
/**
277
283
* Constructor
278
284
*
279
285
* @param StringUtils $string
280
286
* @param DateTime $dateTime
281
287
* @param LoggerInterface $logger
282
288
* @param SelectFactory $selectFactory
289
+ * @param DtoFactoriesTable $dtoFactoriesTable
283
290
* @param array $config
284
291
* @param SerializerInterface|null $serializer
285
292
*/
@@ -288,6 +295,7 @@ public function __construct(
288
295
DateTime $ dateTime ,
289
296
LoggerInterface $ logger ,
290
297
SelectFactory $ selectFactory ,
298
+ DtoFactoriesTable $ dtoFactoriesTable ,
291
299
array $ config = [],
292
300
SerializerInterface $ serializer = null
293
301
) {
@@ -296,6 +304,7 @@ public function __construct(
296
304
$ this ->dateTime = $ dateTime ;
297
305
$ this ->logger = $ logger ;
298
306
$ this ->selectFactory = $ selectFactory ;
307
+ $ this ->columnConfig = $ dtoFactoriesTable ;
299
308
$ this ->serializer = $ serializer ?: ObjectManager::getInstance ()->get (SerializerInterface::class);
300
309
$ this ->exceptionMap = [
301
310
// SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
@@ -4321,7 +4330,9 @@ private function applyCharsetAndCollation($columnType, $definition, $position) :
4321
4330
{
4322
4331
$ pattern = '/\b( ' . implode ('| ' , array_map ('preg_quote ' , self ::COLUMN_TYPE )) . ')\b/i ' ;
4323
4332
if (preg_match ($ pattern , $ columnType ) === 1 ) {
4324
- $ charsets = 'CHARACTER SET ' . self ::CHARSET . ' COLLATE ' . self ::COLLATION ;
4333
+ $ charset = $ this ->columnConfig ->getDefaultCharset ();
4334
+ $ collate = $ this ->columnConfig ->getDefaultCollation ();
4335
+ $ charsets = 'CHARACTER SET ' . $ charset . ' COLLATE ' . $ collate ;
4325
4336
$ columnsAttribute = explode (' ' , trim ($ definition ));
4326
4337
array_splice ($ columnsAttribute , $ position , 0 , $ charsets );
4327
4338
return implode (' ' , $ columnsAttribute );
0 commit comments