From f2fe50ed68d51106f2495ba31c802e93f2f33dc0 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Fri, 14 Jun 2024 12:56:03 +0200
Subject: [PATCH] [TASK] Streamline DefaultTcaSchema

Have a switch/case for the main per-type
construct and avoid loops per type.

Resolves: #104110
Related: #101553
Releases: main
Change-Id: I8c4751a266c979fa96f78a6328e1a70e02e1b91f
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84714
Tested-by: core-ci <typo3@b13.com>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de>
Tested-by: Andreas Kienast <a.fernandez@scripting-base.de>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack <benni@typo3.org>
---
 .../Database/Schema/DefaultTcaSchema.php      | 1153 +++++++----------
 ...ewImportPageAndRecordsByUpdateWithDiff.php |    8 +-
 ...derPreviewImportPageAndRecordsWithDiff.php |    8 +-
 .../Fixtures/XmlExports/irre-records.xml      |   18 +-
 .../pages-and-ttcontent-complex.xml           |   16 +-
 ...-and-ttcontent-multilingual-onlysingle.xml |    6 +-
 ...ages-and-ttcontent-multilingual-single.xml |   12 +-
 .../pages-and-ttcontent-multilingual.xml      |   54 +-
 ...pages-and-ttcontent-with-corrupt-image.xml |   32 +-
 ...s-and-ttcontent-with-flexform-relation.xml |   12 +-
 ...s-and-ttcontent-with-flexform-softrefs.xml |   18 +-
 ...-ttcontent-with-image-but-not-included.xml |   32 +-
 .../pages-and-ttcontent-with-image.xml        |   32 +-
 .../pages-and-ttcontent-with-softrefs.xml     |   18 +-
 .../XmlExports/pages-and-ttcontent.xml        |   30 +-
 .../Fixtures/XmlImports/irre-records.xml      |   18 +-
 16 files changed, 653 insertions(+), 814 deletions(-)

diff --git a/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php b/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php
index c99a7c90ebdf..746d1590b7bd 100644
--- a/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php
+++ b/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php
@@ -453,515 +453,115 @@ class DefaultTcaSchema
             if (!isset($tableDefinition['columns']) || !is_array($tableDefinition['columns'])) {
                 continue;
             }
+            $tableConnectionPlatform = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName)->getDatabasePlatform();
 
-            // Add category fields for all tables, defining category columns (TCA type=category)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'category'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-
-                if (($fieldConfig['config']['relationship'] ?? '') === 'oneToMany') {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::TEXT,
-                        [
-                            'notnull' => false,
-                        ]
-                    );
-                } else {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::INTEGER,
-                        [
-                            'default' => 0,
-                            'notnull' => true,
-                            'unsigned' => true,
-                        ]
-                    );
-                }
-            }
-
-            // Add datetime fields for all tables, defining datetime columns (TCA type=datetime), except
-            // those columns, which had already been added due to definition in "ctrl", e.g. "starttime".
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'datetime'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-
-                if (in_array($fieldConfig['config']['dbType'] ?? '', QueryHelper::getDateTimeTypes(), true)) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        $fieldConfig['config']['dbType'],
-                        [
-                            'notnull' => false,
-                        ]
-                    );
-                } else {
-                    // int unsigned:            from 1970 to 2106.
-                    // int signed:              from 1901 to 2038.
-                    // bigint unsigned/signed:  from whenever to whenever
-                    //
-                    // Anything like crdate,tstamp,starttime,endtime is good with
-                    //  "int unsigned" and can survive the 2038 apocalypse (until 2106).
-                    //
-                    // However, anything that has birthdates or dates
-                    // from the past (sys_file_metadata.content_creation_date) was saved
-                    // as a SIGNED INT. It allowed birthdays of people older than 1970,
-                    // but with the downside that it ends in 2038.
-                    //
-                    // This is now changed to utilize BIGINT everywhere, even when smaller
-                    // date ranges are requested. To reduce complexity, we specifically
-                    // do not evaluate "range.upper/lower" fields and use a unified type here.
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::BIGINT,
-                        [
-                            'default' => 0,
-                            'notnull' => !($fieldConfig['config']['nullable'] ?? false),
-                            'unsigned' => false,
-                        ]
-                    );
-                }
-            }
-
-            // Add slug fields for all tables, defining slug columns (TCA type=slug)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'slug'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'length' => 65535,
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add json fields for all tables, defining json columns (TCA type=json)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'json'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::JSON,
-                    [
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add uuid fields for all tables, defining uuid columns (TCA type=uuid)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'uuid'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::STRING,
-                    [
-                        'length' => 36,
-                        'default' => '',
-                        'notnull' => true,
-                    ]
-                );
-            }
-
-            // Add file fields for all tables, defining file columns (TCA type=file)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'file'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::INTEGER,
-                    [
-                        'default' => 0,
-                        'notnull' => true,
-                        'unsigned' => true,
-                    ]
-                );
-            }
-
-            // Add folder fields for all tables, defining file columns (TCA type=folder)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'folder'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add email fields for all tables, defining email columns (TCA type=email)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'email'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $isNullable = (bool)($fieldConfig['config']['nullable'] ?? false);
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::STRING,
-                    [
-                        'length' => 255,
-                        'default' => ($isNullable ? null : ''),
-                        'notnull' => !$isNullable,
-                    ]
-                );
-            }
-
-            // Add check fields for all tables, defining check columns (TCA type=check)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'check'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::SMALLINT,
-                    [
-                        'default' => $fieldConfig['config']['default'] ?? 0,
-                        'notnull' => true,
-                        'unsigned' => true,
-                    ]
-                );
-            }
-
-            // Add file fields for all tables, defining crop columns (TCA type=imageManipulation)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'imageManipulation'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add fields for all tables, defining language columns (TCA type=language)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'language'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::INTEGER,
-                    [
-                        'default' => 0,
-                        'notnull' => true,
-                        'unsigned' => false,
-                    ]
-                );
-            }
-
-            // Add fields for all tables, defining group columns (TCA type=group)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'group'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                if (isset($fieldConfig['config']['MM'])) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::INTEGER,
-                        [
-                            'default' => 0,
-                            'notnull' => true,
-                            'unsigned' => true,
-                        ]
-                    );
-                } else {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::TEXT,
-                        [
-                            'notnull' => false,
-                        ]
-                    );
-                }
-            }
-
-            // Add fields for all tables, defining flex columns (TCA type=flex)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'flex'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add fields for all tables, defining text columns (TCA type=text)
             foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'text'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
+                if ($this->isColumnDefinedForTable($tables, $tableName, $fieldName)) {
                     continue;
                 }
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'notnull' => false,
-                    ]
-                );
-            }
-
-            // Add fields for all tables, defining password columns (TCA type=password)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'password'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
+                $type = (string)($fieldConfig['config']['type'] ?? '');
+                if ($type === '') {
                     continue;
                 }
-                if ($fieldConfig['config']['nullable'] ?? false) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'default' => null,
-                            'notnull' => false,
-                        ]
-                    );
-                } else {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'default' => '',
-                            'notnull' => true,
-                        ]
-                    );
-                }
-            }
 
-            // Add fields for all tables, defining color columns (TCA type=color)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'color'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                if ($fieldConfig['config']['nullable'] ?? false) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'length' => 7,
-                            'default' => null,
-                            'notnull' => false,
-                        ]
-                    );
-                } else {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'length' => 7,
-                            'default' => '',
-                            'notnull' => true,
-                        ]
-                    );
-                }
-            }
+                switch ($type) {
+                    case 'category':
+                        if (($fieldConfig['config']['relationship'] ?? '') === 'oneToMany') {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::TEXT,
+                                [
+                                    'notnull' => false,
+                                ]
+                            );
+                        } else {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::INTEGER,
+                                [
+                                    'default' => 0,
+                                    'notnull' => true,
+                                    'unsigned' => true,
+                                ]
+                            );
+                        }
+                        break;
 
-            // Add fields for all tables, defining radio columns (TCA type=radio)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'radio'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $hasItemsProcFunc = ($fieldConfig['config']['itemsProcFunc'] ?? '') !== '';
-                $items = $fieldConfig['config']['items'] ?? [];
+                    case 'datetime':
+                        // Add datetime fields for all tables, defining datetime columns (TCA type=datetime), except
+                        // those columns, which had already been added due to definition in "ctrl", e.g. "starttime".
+                        if (in_array($fieldConfig['config']['dbType'] ?? '', QueryHelper::getDateTimeTypes(), true)) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                $fieldConfig['config']['dbType'],
+                                [
+                                    'notnull' => false,
+                                ]
+                            );
+                        } else {
+                            // int unsigned:            from 1970 to 2106.
+                            // int signed:              from 1901 to 2038.
+                            // bigint unsigned/signed:  from whenever to whenever
+                            //
+                            // Anything like crdate,tstamp,starttime,endtime is good with
+                            //  "int unsigned" and can survive the 2038 apocalypse (until 2106).
+                            //
+                            // However, anything that has birthdates or dates
+                            // from the past (sys_file_metadata.content_creation_date) was saved
+                            // as a SIGNED INT. It allowed birthdays of people older than 1970,
+                            // but with the downside that it ends in 2038.
+                            //
+                            // This is now changed to utilize BIGINT everywhere, even when smaller
+                            // date ranges are requested. To reduce complexity, we specifically
+                            // do not evaluate "range.upper/lower" fields and use a unified type here.
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::BIGINT,
+                                [
+                                    'default' => 0,
+                                    'notnull' => !($fieldConfig['config']['nullable'] ?? false),
+                                    'unsigned' => false,
+                                ]
+                            );
+                        }
+                        break;
 
-                // With itemsProcFunc we can't be sure, which values are persisted. Use type string.
-                if ($hasItemsProcFunc) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'length' => 255,
-                            'default' => '',
-                            'notnull' => true,
-                        ]
-                    );
-                    continue;
-                }
+                    case 'slug':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::TEXT,
+                            [
+                                'length' => 65535,
+                                'notnull' => false,
+                            ]
+                        );
+                        break;
 
-                // If no items are configured, use type string to be safe for values added directly.
-                if ($items === []) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'length' => 255,
-                            'default' => '',
-                            'notnull' => true,
-                        ]
-                    );
-                    continue;
-                }
+                    case 'json':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::JSON,
+                            [
+                                'notnull' => false,
+                            ]
+                        );
+                        break;
 
-                // If only one value is NOT an integer use type string.
-                foreach ($items as $item) {
-                    if (!MathUtility::canBeInterpretedAsInteger($item['value'])) {
+                    case 'uuid':
                         $tables[$tableName]->addColumn(
                             $this->quote($fieldName),
                             Types::STRING,
                             [
-                                'length' => 255,
+                                'length' => 36,
                                 'default' => '',
                                 'notnull' => true,
                             ]
                         );
-                        // continue with next $tableDefinition['columns']
-                        // see: DefaultTcaSchemaTest->enrichAddsRadioStringVerifyThatCorrectLoopIsContinued()
-                        continue 2;
-                    }
-                }
-
-                // Use integer type.
-                $allValues = array_map(fn(array $item): int => (int)$item['value'], $items);
-                $minValue = min($allValues);
-                $maxValue = max($allValues);
-                // Try to safe some bytes - can be reconsidered to simply use Types::INTEGER.
-                $integerType = ($minValue >= -32768 && $maxValue < 32768)
-                    ? Types::SMALLINT
-                    : Types::INTEGER;
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    $integerType,
-                    [
-                        'default' => 0,
-                        'notnull' => true,
-                    ]
-                );
-
-                // Keep the house clean.
-                unset($items, $allValues, $minValue, $maxValue, $integerType);
-            }
-
-            // Add fields for all tables, defining link columns (TCA type=link)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'link'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $nullable = $fieldConfig['config']['nullable'] ?? false;
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::TEXT,
-                    [
-                        'length' => 65535,
-                        'default' => $nullable ? null : '',
-                        'notnull' => !$nullable,
-                    ]
-                );
-            }
-
-            // Add fields for all tables, defining input columns (TCA type=input)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'input'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $length = $fieldConfig['config']['max'] ?? null;
-                $nullable = $fieldConfig['config']['nullable'] ?? false;
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::STRING,
-                    [
-                        'length' => $length ?? 255,
-                        'default' => '',
-                        'notnull' => !$nullable,
-                    ]
-                );
-            }
+                        break;
 
-            // Add fields for all tables, defining inline columns (TCA type=inline)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'inline'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                if (($fieldConfig['config']['MM'] ?? '') !== '' || ($fieldConfig['config']['foreign_field'] ?? '') !== '') {
-                    // Parent "count" field
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::INTEGER,
-                        [
-                            'default' => 0,
-                            'notnull' => true,
-                            'unsigned' => true,
-                        ]
-                    );
-                } else {
-                    // Inline "csv"
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'default' => '',
-                            'notnull' => true,
-                            'length' => 255,
-                        ]
-                    );
-                }
-                if (($fieldConfig['config']['foreign_field'] ?? '') !== '') {
-                    // Add definition for "foreign_field" (contains parent uid) in the child table if it is not defined
-                    // in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql
-                    $childTable = $fieldConfig['config']['foreign_table'];
-                    if (!(($tables[$childTable] ?? null) instanceof Table)) {
-                        throw new DefaultTcaSchemaTablePositionException('Table ' . $childTable . ' not found in schema list', 1527854474);
-                    }
-                    $childTableForeignFieldName = $fieldConfig['config']['foreign_field'];
-                    $childTableForeignFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignFieldName] ?? [];
-                    if (($childTableForeignFieldConfig === [] || ($childTableForeignFieldConfig['config']['type'] ?? '') === 'passthrough')
-                        && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignFieldName)
-                    ) {
-                        $tables[$childTable]->addColumn(
-                            $this->quote($childTableForeignFieldName),
+                    case 'file':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
                             Types::INTEGER,
                             [
                                 'default' => 0,
@@ -969,209 +569,448 @@ class DefaultTcaSchema
                                 'unsigned' => true,
                             ]
                         );
-                    }
-                    // Add definition for "foreign_table_field" (contains name of parent table) in the child table if it is not
-                    // defined in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql
-                    $childTableForeignTableFieldName = $fieldConfig['config']['foreign_table_field'] ?? '';
-                    $childTableForeignTableFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignTableFieldName] ?? [];
-                    if ($childTableForeignTableFieldName !== ''
-                        && ($childTableForeignTableFieldConfig === [] || ($childTableForeignTableFieldConfig['config']['type'] ?? '') === 'passthrough')
-                        && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignTableFieldName)
-                    ) {
-                        $tables[$childTable]->addColumn(
-                            $this->quote($childTableForeignTableFieldName),
+                        break;
+
+                    case 'folder':
+                    case 'imageManipulation':
+                    case 'flex':
+                    case 'text':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::TEXT,
+                            [
+                                'notnull' => false,
+                            ]
+                        );
+                        break;
+
+                    case 'email':
+                        $isNullable = (bool)($fieldConfig['config']['nullable'] ?? false);
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
                             Types::STRING,
                             [
-                                'default' => '',
-                                'notnull' => true,
                                 'length' => 255,
+                                'default' => ($isNullable ? null : ''),
+                                'notnull' => !$isNullable,
                             ]
                         );
-                    }
-                }
-            }
+                        break;
 
-            // Add fields for all tables, defining number columns (TCA type=number)
-            $tableConnectionPlatform = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName)->getDatabasePlatform();
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'number'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                $type = ($fieldConfig['config']['format'] ?? '') === 'decimal' ? Types::DECIMAL : Types::INTEGER;
-                $nullable = $fieldConfig['config']['nullable'] ?? false;
-                $lowerRange = $fieldConfig['config']['range']['lower'] ?? -1;
-                // Integer type for all database platforms.
-                if ($type === Types::INTEGER) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::INTEGER,
-                        [
-                            'default' => $nullable === true ? null : 0,
-                            'notnull' => !$nullable,
-                            'unsigned' => $lowerRange >= 0,
-                        ]
-                    );
-                    continue;
-                }
-                // SQLite internally defines NUMERIC() fields as real, and therefore as floating numbers. pdo_sqlite
-                // then returns PHP float which can lead to rounding issues. See https://bugs.php.net/bug.php?id=81397
-                // for more details. We create a 'string' field on SQLite as workaround.
-                // @todo Database schema should be created with MySQL in mind and not mixed. Transforming to the
-                //       concrete database platform is handled in the database compare area. Sadly, this is not
-                //       possible right now but upcoming preparation towards doctrine/dbal 4 makes it possible to
-                //       move this "hack" to a different place.
-                if ($tableConnectionPlatform instanceof DoctrineSQLitePlatform) {
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'default' => $nullable === true ? null : '0.00',
-                            'notnull' => !$nullable,
-                            'length' => 255,
-                        ]
-                    );
-                    continue;
-                }
-                // Decimal for all supported platforms except SQLite
-                $tables[$tableName]->addColumn(
-                    $this->quote($fieldName),
-                    Types::DECIMAL,
-                    [
-                        'default' => $nullable === true ? null : 0.00,
-                        'notnull' => !$nullable,
-                        'unsigned' => $lowerRange >= 0,
-                        'precision' => 10,
-                        'scale' => 2,
-                    ]
-                );
-            }
-            // Cleanup
-            unset($tableConnectionPlatform, $type, $nullable, $lowerRange);
+                    case 'check':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::SMALLINT,
+                            [
+                                'default' => $fieldConfig['config']['default'] ?? 0,
+                                'notnull' => true,
+                                'unsigned' => true,
+                            ]
+                        );
+                        break;
 
-            // Add fields for all tables, defining select columns (TCA type=select)
-            foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) {
-                if ((string)($fieldConfig['config']['type'] ?? '') !== 'select'
-                    || $this->isColumnDefinedForTable($tables, $tableName, $fieldName)
-                ) {
-                    continue;
-                }
-                if (($fieldConfig['config']['MM'] ?? '') !== '') {
-                    // MM relation, this is a "parent count" field. Have an int.
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::INTEGER,
-                        [
-                            'notnull' => true,
-                            'default' => 0,
-                            'unsigned' => true,
-                        ]
-                    );
-                    continue;
-                }
+                    case 'language':
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::INTEGER,
+                            [
+                                'default' => 0,
+                                'notnull' => true,
+                                'unsigned' => false,
+                            ]
+                        );
+                        break;
+
+                    case 'group':
+                        if (isset($fieldConfig['config']['MM'])) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::INTEGER,
+                                [
+                                    'default' => 0,
+                                    'notnull' => true,
+                                    'unsigned' => true,
+                                ]
+                            );
+                        } else {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::TEXT,
+                                [
+                                    'notnull' => false,
+                                ]
+                            );
+                        }
+                        break;
 
-                $dbFieldLength = (int)($fieldConfig['config']['dbFieldLength'] ?? 0);
+                    case 'password':
+                        if ($fieldConfig['config']['nullable'] ?? false) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'default' => null,
+                                    'notnull' => false,
+                                ]
+                            );
+                        } else {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'default' => '',
+                                    'notnull' => true,
+                                ]
+                            );
+                        }
+                        break;
 
-                // If itemsProcFunc is not set, check the item values
-                if (($fieldConfig['config']['itemsProcFunc'] ?? '') === '') {
-                    $items = $fieldConfig['config']['items'] ?? [];
-                    $itemsContainsOnlyIntegers = true;
-                    foreach ($items as $item) {
-                        if (!MathUtility::canBeInterpretedAsInteger($item['value'])) {
-                            $itemsContainsOnlyIntegers = false;
-                            break;
+                    case 'color':
+                        if ($fieldConfig['config']['nullable'] ?? false) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'length' => 7,
+                                    'default' => null,
+                                    'notnull' => false,
+                                ]
+                            );
+                        } else {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'length' => 7,
+                                    'default' => '',
+                                    'notnull' => true,
+                                ]
+                            );
                         }
-                    }
-                    $itemsAreAllPositive = true;
-                    foreach ($items as $item) {
-                        if ($item['value'] < 0) {
-                            $itemsAreAllPositive = false;
+                        break;
+
+                    case 'radio':
+                        $hasItemsProcFunc = ($fieldConfig['config']['itemsProcFunc'] ?? '') !== '';
+                        $items = $fieldConfig['config']['items'] ?? [];
+                        // With itemsProcFunc we can't be sure, which values are persisted. Use type string.
+                        if ($hasItemsProcFunc) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'length' => 255,
+                                    'default' => '',
+                                    'notnull' => true,
+                                ]
+                            );
                             break;
                         }
-                    }
-                    // @todo: The dependency to renderType is unfortunate here. It's only purpose is to potentially have int fields
-                    //        instead of string when this is a 'single' relation / value. However, renderType should usually not
-                    //        influence DB layer at all. Maybe 'selectSingle' should be changed to an own 'type' instead to make
-                    //        this more explicit. Maybe DataHandler could benefit from this as well?
-                    if (($fieldConfig['config']['renderType'] ?? '') === 'selectSingle' || ($fieldConfig['config']['maxitems'] ?? 0) === 1) {
-                        // With 'selectSingle' or with 'maxitems = 1', only a single value can be selected.
-                        if (
-                            !is_array($fieldConfig['config']['fileFolderConfig'] ?? false)
-                            && ($items !== [] || ($fieldConfig['config']['foreign_table'] ?? '') !== '')
-                            && $itemsContainsOnlyIntegers === true
-                        ) {
-                            // If the item list is empty, or if it contains only int values, an int field is enough.
-                            // Also, the config must not be a 'fileFolderConfig' field which takes string values.
+                        // If no items are configured, use type string to be safe for values added directly.
+                        if ($items === []) {
                             $tables[$tableName]->addColumn(
                                 $this->quote($fieldName),
-                                Types::INTEGER,
+                                Types::STRING,
                                 [
+                                    'length' => 255,
+                                    'default' => '',
                                     'notnull' => true,
-                                    'default' => 0,
-                                    'unsigned' => $itemsAreAllPositive,
                                 ]
                             );
-                            continue;
+                            break;
+                        }
+                        // If only one value is NOT an integer use type string.
+                        foreach ($items as $item) {
+                            if (!MathUtility::canBeInterpretedAsInteger($item['value'])) {
+                                $tables[$tableName]->addColumn(
+                                    $this->quote($fieldName),
+                                    Types::STRING,
+                                    [
+                                        'length' => 255,
+                                        'default' => '',
+                                        'notnull' => true,
+                                    ]
+                                );
+                                // continue with next $tableDefinition['columns']
+                                // see: DefaultTcaSchemaTest->enrichAddsRadioStringVerifyThatCorrectLoopIsContinued()
+                                break 2;
+                            }
                         }
-                        // If int is no option, have a string field.
+                        // Use integer type.
+                        $allValues = array_map(fn(array $item): int => (int)$item['value'], $items);
+                        $minValue = min($allValues);
+                        $maxValue = max($allValues);
+                        // Try to safe some bytes - can be reconsidered to simply use Types::INTEGER.
+                        $integerType = ($minValue >= -32768 && $maxValue < 32768)
+                            ? Types::SMALLINT
+                            : Types::INTEGER;
                         $tables[$tableName]->addColumn(
                             $this->quote($fieldName),
-                            Types::STRING,
+                            $integerType,
                             [
+                                'default' => 0,
                                 'notnull' => true,
-                                'default' => '',
-                                'length' => $dbFieldLength > 0 ? $dbFieldLength : 255,
                             ]
                         );
-                        continue;
-                    }
-                    if ($itemsContainsOnlyIntegers) {
-                        // Multiple values can be selected and will be stored comma separated. When manual item values are
-                        // all integers, or if there is a foreign_table, we end up with a comma separated list of integers.
-                        // Using string / varchar 255 here should be long enough to store plenty of values, and can be
-                        // changed by setting 'dbFieldLength'.
+                        break;
+
+                    case 'link':
+                        $nullable = $fieldConfig['config']['nullable'] ?? false;
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::TEXT,
+                            [
+                                'length' => 65535,
+                                'default' => $nullable ? null : '',
+                                'notnull' => !$nullable,
+                            ]
+                        );
+                        break;
+
+                    case 'input':
+                        $length = $fieldConfig['config']['max'] ?? null;
+                        $nullable = $fieldConfig['config']['nullable'] ?? false;
                         $tables[$tableName]->addColumn(
                             $this->quote($fieldName),
                             Types::STRING,
                             [
-                                // @todo: nullable = true is not a good default here. This stems from the fact that this
-                                //        if triggers a lot of TEXT->VARCHAR() field changes during upgrade, where TEXT
-                                //        is always nullable, but varchar() is not. As such, we for now declare this
-                                //        nullable, but could have a look at it later again when a value upgrade
-                                //        for such cases is in place that updates existing null fields to empty string.
-                                'notnull' => false,
+                                'length' => $length ?? 255,
                                 'default' => '',
-                                'length' => $dbFieldLength > 0 ? $dbFieldLength : 255,
+                                'notnull' => !$nullable,
                             ]
                         );
-                        continue;
-                    }
-                }
+                        break;
 
-                if ($dbFieldLength > 0) {
-                    // If nothing else matches, but there is a dbFieldLength set, have varchar with that length.
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::STRING,
-                        [
-                            'notnull' => true,
-                            'default' => '',
-                            'length' => $dbFieldLength,
-                        ]
-                    );
-                } else {
-                    // Final fallback creates a (nullable) text field.
-                    $tables[$tableName]->addColumn(
-                        $this->quote($fieldName),
-                        Types::TEXT,
-                        [
-                            'notnull' => false,
-                        ]
-                    );
+                    case 'inline':
+                        if (($fieldConfig['config']['MM'] ?? '') !== '' || ($fieldConfig['config']['foreign_field'] ?? '') !== '') {
+                            // Parent "count" field
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::INTEGER,
+                                [
+                                    'default' => 0,
+                                    'notnull' => true,
+                                    'unsigned' => true,
+                                ]
+                            );
+                        } else {
+                            // Inline "csv"
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'default' => '',
+                                    'notnull' => true,
+                                    'length' => 255,
+                                ]
+                            );
+                        }
+                        if (($fieldConfig['config']['foreign_field'] ?? '') !== '') {
+                            // Add definition for "foreign_field" (contains parent uid) in the child table if it is not defined
+                            // in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql
+                            $childTable = $fieldConfig['config']['foreign_table'];
+                            if (!(($tables[$childTable] ?? null) instanceof Table)) {
+                                throw new DefaultTcaSchemaTablePositionException('Table ' . $childTable . ' not found in schema list', 1527854474);
+                            }
+                            $childTableForeignFieldName = $fieldConfig['config']['foreign_field'];
+                            $childTableForeignFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignFieldName] ?? [];
+                            if (($childTableForeignFieldConfig === [] || ($childTableForeignFieldConfig['config']['type'] ?? '') === 'passthrough')
+                                && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignFieldName)
+                            ) {
+                                $tables[$childTable]->addColumn(
+                                    $this->quote($childTableForeignFieldName),
+                                    Types::INTEGER,
+                                    [
+                                        'default' => 0,
+                                        'notnull' => true,
+                                        'unsigned' => true,
+                                    ]
+                                );
+                            }
+                            // Add definition for "foreign_table_field" (contains name of parent table) in the child table if it is not
+                            // defined in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql
+                            $childTableForeignTableFieldName = $fieldConfig['config']['foreign_table_field'] ?? '';
+                            $childTableForeignTableFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignTableFieldName] ?? [];
+                            if ($childTableForeignTableFieldName !== ''
+                                && ($childTableForeignTableFieldConfig === [] || ($childTableForeignTableFieldConfig['config']['type'] ?? '') === 'passthrough')
+                                && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignTableFieldName)
+                            ) {
+                                $tables[$childTable]->addColumn(
+                                    $this->quote($childTableForeignTableFieldName),
+                                    Types::STRING,
+                                    [
+                                        'default' => '',
+                                        'notnull' => true,
+                                        'length' => 255,
+                                    ]
+                                );
+                            }
+                        }
+                        break;
+
+                    case 'number':
+                        $type = ($fieldConfig['config']['format'] ?? '') === 'decimal' ? Types::DECIMAL : Types::INTEGER;
+                        $nullable = $fieldConfig['config']['nullable'] ?? false;
+                        $lowerRange = $fieldConfig['config']['range']['lower'] ?? -1;
+                        // Integer type for all database platforms.
+                        if ($type === Types::INTEGER) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::INTEGER,
+                                [
+                                    'default' => $nullable === true ? null : 0,
+                                    'notnull' => !$nullable,
+                                    'unsigned' => $lowerRange >= 0,
+                                ]
+                            );
+                            break;
+                        }
+                        // SQLite internally defines NUMERIC() fields as real, and therefore as floating numbers. pdo_sqlite
+                        // then returns PHP float which can lead to rounding issues. See https://bugs.php.net/bug.php?id=81397
+                        // for more details. We create a 'string' field on SQLite as workaround.
+                        // @todo: Database schema should be created with MySQL in mind and not mixed. Transforming to the
+                        //        concrete database platform is handled in the database compare area. Sadly, this is not
+                        //        possible right now but upcoming preparation towards doctrine/dbal 4 makes it possible to
+                        //        move this "hack" to a different place.
+                        if ($tableConnectionPlatform instanceof DoctrineSQLitePlatform) {
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'default' => $nullable === true ? null : '0.00',
+                                    'notnull' => !$nullable,
+                                    'length' => 255,
+                                ]
+                            );
+                            break;
+                        }
+                        // Decimal for all supported platforms except SQLite
+                        $tables[$tableName]->addColumn(
+                            $this->quote($fieldName),
+                            Types::DECIMAL,
+                            [
+                                'default' => $nullable === true ? null : 0.00,
+                                'notnull' => !$nullable,
+                                'unsigned' => $lowerRange >= 0,
+                                'precision' => 10,
+                                'scale' => 2,
+                            ]
+                        );
+                        break;
+
+                    case 'select':
+                        if (($fieldConfig['config']['MM'] ?? '') !== '') {
+                            // MM relation, this is a "parent count" field. Have an int.
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::INTEGER,
+                                [
+                                    'notnull' => true,
+                                    'default' => 0,
+                                    'unsigned' => true,
+                                ]
+                            );
+                            break;
+                        }
+                        $dbFieldLength = (int)($fieldConfig['config']['dbFieldLength'] ?? 0);
+                        // If itemsProcFunc is not set, check the item values
+                        if (($fieldConfig['config']['itemsProcFunc'] ?? '') === '') {
+                            $items = $fieldConfig['config']['items'] ?? [];
+                            $itemsContainsOnlyIntegers = true;
+                            foreach ($items as $item) {
+                                if (!MathUtility::canBeInterpretedAsInteger($item['value'])) {
+                                    $itemsContainsOnlyIntegers = false;
+                                    break;
+                                }
+                            }
+                            $itemsAreAllPositive = true;
+                            foreach ($items as $item) {
+                                if ($item['value'] < 0) {
+                                    $itemsAreAllPositive = false;
+                                    break;
+                                }
+                            }
+                            // @todo: The dependency to renderType is unfortunate here. It's only purpose is to potentially have int fields
+                            //        instead of string when this is a 'single' relation / value. However, renderType should usually not
+                            //        influence DB layer at all. Maybe 'selectSingle' should be changed to an own 'type' instead to make
+                            //        this more explicit. Maybe DataHandler could benefit from this as well?
+                            if (($fieldConfig['config']['renderType'] ?? '') === 'selectSingle' || ($fieldConfig['config']['maxitems'] ?? 0) === 1) {
+                                // With 'selectSingle' or with 'maxitems = 1', only a single value can be selected.
+                                if (
+                                    !is_array($fieldConfig['config']['fileFolderConfig'] ?? false)
+                                    && ($items !== [] || ($fieldConfig['config']['foreign_table'] ?? '') !== '')
+                                    && $itemsContainsOnlyIntegers === true
+                                ) {
+                                    // If the item list is empty, or if it contains only int values, an int field is enough.
+                                    // Also, the config must not be a 'fileFolderConfig' field which takes string values.
+                                    $tables[$tableName]->addColumn(
+                                        $this->quote($fieldName),
+                                        Types::INTEGER,
+                                        [
+                                            'notnull' => true,
+                                            'default' => 0,
+                                            'unsigned' => $itemsAreAllPositive,
+                                        ]
+                                    );
+                                    break;
+                                }
+                                // If int is no option, have a string field.
+                                $tables[$tableName]->addColumn(
+                                    $this->quote($fieldName),
+                                    Types::STRING,
+                                    [
+                                        'notnull' => true,
+                                        'default' => '',
+                                        'length' => $dbFieldLength > 0 ? $dbFieldLength : 255,
+                                    ]
+                                );
+                                break;
+                            }
+                            if ($itemsContainsOnlyIntegers) {
+                                // Multiple values can be selected and will be stored comma separated. When manual item values are
+                                // all integers, or if there is a foreign_table, we end up with a comma separated list of integers.
+                                // Using string / varchar 255 here should be long enough to store plenty of values, and can be
+                                // changed by setting 'dbFieldLength'.
+                                $tables[$tableName]->addColumn(
+                                    $this->quote($fieldName),
+                                    Types::STRING,
+                                    [
+                                        // @todo: nullable = true is not a good default here. This stems from the fact that this
+                                        //        if triggers a lot of TEXT->VARCHAR() field changes during upgrade, where TEXT
+                                        //        is always nullable, but varchar() is not. As such, we for now declare this
+                                        //        nullable, but could have a look at it later again when a value upgrade
+                                        //        for such cases is in place that updates existing null fields to empty string.
+                                        'notnull' => false,
+                                        'default' => '',
+                                        'length' => $dbFieldLength > 0 ? $dbFieldLength : 255,
+                                    ]
+                                );
+                                break;
+                            }
+                        }
+                        if ($dbFieldLength > 0) {
+                            // If nothing else matches, but there is a dbFieldLength set, have varchar with that length.
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::STRING,
+                                [
+                                    'notnull' => true,
+                                    'default' => '',
+                                    'length' => $dbFieldLength,
+                                ]
+                            );
+                        } else {
+                            // Final fallback creates a (nullable) text field.
+                            $tables[$tableName]->addColumn(
+                                $this->quote($fieldName),
+                                Types::TEXT,
+                                [
+                                    'notnull' => false,
+                                ]
+                            );
+                        }
+                        break;
                 }
             }
-
         }
 
         return $tables;
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php
index 070a2ccf675b..75d2277c5da6 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php
@@ -174,9 +174,9 @@ return [
             'updateMode' => sprintf('<select class="form-select form-select-sm" name="tx_impexp[import_mode][tt_content:1]" style="width: 100px"><option value="0">Update</option><option value="%s">Import as new</option><option value="%s">Ignore PID</option><option value="%s">Exclude</option></select>', \TYPO3\CMS\Impexp\Import::IMPORT_MODE_AS_NEW, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_IGNORE_PID, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_EXCLUDE),
             'showDiffContent' => '<strong class="text-nowrap">[tt_content:1 =&gt; 2]:</strong>
 <table class="table table-striped table-hover">
-<tr><td>Images (image)</td><td>N/A</td></tr>
-<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr>
 <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>&amp; Images</del><ins>Element</ins></td></tr>
+<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr>
+<tr><td>Images (image)</td><td>N/A</td></tr>
 </table>',
             'controls' => '',
             'message' => '',
@@ -243,9 +243,9 @@ return [
             'updateMode' => sprintf('<select class="form-select form-select-sm" name="tx_impexp[import_mode][tt_content:2]" style="width: 100px"><option value="0">Update</option><option value="%s">Import as new</option><option value="%s">Ignore PID</option><option value="%s">Exclude</option></select>', \TYPO3\CMS\Impexp\Import::IMPORT_MODE_AS_NEW, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_IGNORE_PID, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_EXCLUDE),
             'showDiffContent' => '<strong class="text-nowrap">[tt_content:2 =&gt; 1]:</strong>' . "\n"
                 . '<table class="table table-striped table-hover">' . "\n"
-                . '<tr><td>Images (image)</td><td>N/A</td></tr>' . "\n"
-                . '<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>' . "\n"
                 . '<tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>&amp; Images</del><ins>Element</ins></td></tr>' . "\n"
+                . '<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>' . "\n"
+                . '<tr><td>Images (image)</td><td>N/A</td></tr>' . "\n"
                 . '</table>',
             'controls' => '',
             'message' => '',
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php
index ccb1b18bbdb7..3afa38a1ddbe 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php
@@ -137,9 +137,9 @@ return [
             'active' => 'active',
             'showDiffContent' => '<strong class="text-nowrap">[tt_content:1 =&gt; 2]:</strong>
 <table class="table table-striped table-hover">
-<tr><td>Images (image)</td><td>N/A</td></tr>
-<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr>
 <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>&amp; Images</del><ins>Element</ins></td></tr>
+<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr>
+<tr><td>Images (image)</td><td>N/A</td></tr>
 </table>',
             'controls' => '',
             'message' => '',
@@ -204,9 +204,9 @@ return [
             'active' => 'active',
             'showDiffContent' => '<strong class="text-nowrap">[tt_content:2 =&gt; 1]:</strong>
 <table class="table table-striped table-hover">
-<tr><td>Images (image)</td><td>N/A</td></tr>
-<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>
 <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>&amp; Images</del><ins>Element</ins></td></tr>
+<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>
+<tr><td>Images (image)</td><td>N/A</td></tr>
 </table>',
             'controls' => '',
             'message' => '',
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml
index 31fb9b44dfde..2a94134b5394 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml
@@ -710,8 +710,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">IRRE</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">IRRE</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -722,10 +722,10 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
+                <field index="CType">text</field>
                 <field index="header">Test content</field>
                 <field index="tx_testirrecsv_hotels">1,2</field>
                 <field index="tx_testirreforeignfield_hotels" type="integer">2</field>
-                <field index="CType">text</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="tx_testirrecsv_hotels" type="array">
@@ -1282,8 +1282,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">223.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1297,8 +1297,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price 1.2.2 (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">567.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1312,8 +1312,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price 1.1.1 (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">567.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1355,9 +1355,9 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">2</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="prices" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">2</field>
+                <field index="prices" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1399,9 +1399,9 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="prices" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">1</field>
+                <field index="prices" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1569,10 +1569,10 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">0</field>
-                <field index="allincl" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">1</field>
                 <field index="quality" type="integer">2</field>
+                <field index="allincl" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1605,10 +1605,10 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">0</field>
-                <field index="allincl" type="integer">0</field>
                 <field index="hotelid" type="integer">2</field>
                 <field index="offerid" type="integer">2</field>
                 <field index="quality" type="integer">4</field>
+                <field index="allincl" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml
index 684bcfcda8a4..243c01f2b3b1 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml
@@ -111,8 +111,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -123,9 +123,9 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="header_link">file:2</field>
-                <field index="header">Test content</field>
                 <field index="CType">text</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:2</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -155,9 +155,9 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="header_link">file:4</field>
-                <field index="header">Test content 2</field>
                 <field index="CType">text</field>
+                <field index="header">Test content 2</field>
+                <field index="header_link">file:4</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -190,11 +190,11 @@
                 <field index="sha1">e873c1e2ffd0f191e183a1057de3eef4d62e782d</field>
                 <field index="creation_date">1393346082</field>
                 <field index="modification_date">1392907534</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">5565</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">5565</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml
index 97889a067dfa..47e54a7d83b5 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml
@@ -68,8 +68,8 @@
 				<field index="l10n_parent" type="integer">5</field>
 				<field index="l10n_source" type="integer">5</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
 			</fieldlist>
 			<related index="rels" type="array">
 				<field index="l10n_parent" type="array">
@@ -101,8 +101,8 @@
 				<field index="sys_language_uid" type="integer">1</field>
 				<field index="l18n_parent" type="integer">3</field>
 				<field index="l10n_source" type="integer">3</field>
-				<field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
             </fieldlist>
 			<related index="rels" type="array">
 				<field index="l18n_parent" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml
index 4fa71e3b4615..54844923409f 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml
@@ -86,8 +86,8 @@
 				<field index="l10n_parent" type="integer">5</field>
 				<field index="l10n_source" type="integer">5</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
 			</fieldlist>
 			<related index="rels" type="array">
 				<field index="l10n_parent" type="array">
@@ -119,8 +119,8 @@
 				<field index="sys_language_uid" type="integer">1</field>
 				<field index="l18n_parent" type="integer">3</field>
 				<field index="l10n_source" type="integer">3</field>
-				<field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
             </fieldlist>
 			<related index="rels" type="array">
 				<field index="l18n_parent" type="array">
@@ -154,8 +154,8 @@
 				<field index="l10n_parent">0</field>
 				<field index="l10n_source">0</field>
 				<field index="perms_everybody">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field>
-				<field index="doktype">1</field>
+                <field index="doktype">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -168,8 +168,8 @@
 				<field index="sys_language_uid">0</field>
 				<field index="l18n_parent">0</field>
 				<field index="l10n_source">0</field>
-				<field index="header">Test content #3 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (default language=0)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #3 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (default language=0)</field>
             </fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml
index 6db64ba4423a..a076f2f84e85 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml
@@ -253,8 +253,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Root</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -269,8 +269,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, two translations [DEFAULT]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, two translations [DEFAULT]</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -285,8 +285,8 @@
 				<field index="l10n_parent" type="integer">7</field>
 				<field index="l10n_source" type="integer">7</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, two languages [GERMAN]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, two languages [GERMAN]</field>
 			</fieldlist>
 			<related index="rels" type="array">
 				<field index="l10n_parent" type="array">
@@ -318,8 +318,8 @@
 				<field index="sys_language_uid" type="integer">0</field>
 				<field index="l18n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
-				<field index="header">Test content #2 pid=7 &#039;Dummy with 3 languages, two translations&#039; (default language=0)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #2 pid=7 &#039;Dummy with 3 languages, two translations&#039; (default language=0)</field>
             </fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -332,8 +332,8 @@
 				<field index="sys_language_uid" type="integer">1</field>
 				<field index="l18n_parent" type="integer">2</field>
 				<field index="l10n_source" type="integer">2</field>
-				<field index="header">Test content #7 pid=7 &#039;Dummy with 3 languages, two translations&#039; (german=1)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #7 pid=7 &#039;Dummy with 3 languages, two translations&#039; (german=1)</field>
             </fieldlist>
 			<related index="rels" type="array">
 				<field index="l18n_parent" type="array">
@@ -367,8 +367,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, only default content [DEFAULT]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, only default content [DEFAULT]</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -381,8 +381,8 @@
 				<field index="sys_language_uid" type="integer">0</field>
 				<field index="l18n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
-				<field index="header">Test content #6 pid=6 &#039;Dummy with 3 languages, only default content&#039; (default language=0)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #6 pid=6 &#039;Dummy with 3 languages, only default content&#039; (default language=0)</field>
             </fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -397,8 +397,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -413,8 +413,8 @@
 				<field index="l10n_parent" type="integer">5</field>
 				<field index="l10n_source" type="integer">5</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field>
 			</fieldlist>
 			<related index="rels" type="array">
 				<field index="l10n_parent" type="array">
@@ -448,8 +448,8 @@
 				<field index="l10n_parent" type="integer">5</field>
 				<field index="l10n_source" type="integer">5</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, fully translated [FRENCH]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, fully translated [FRENCH]</field>
 			</fieldlist>
 			<related index="rels" type="array">
 				<field index="l10n_parent" type="array">
@@ -481,8 +481,8 @@
 				<field index="sys_language_uid" type="integer">0</field>
 				<field index="l18n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
-				<field index="header">Test content #3 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (default language=0)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #3 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (default language=0)</field>
             </fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -495,8 +495,8 @@
 				<field index="sys_language_uid" type="integer">1</field>
 				<field index="l18n_parent" type="integer">3</field>
 				<field index="l10n_source" type="integer">3</field>
-				<field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #4 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (german=1)</field>
             </fieldlist>
 			<related index="rels" type="array">
 				<field index="l18n_parent" type="array">
@@ -528,8 +528,8 @@
 				<field index="sys_language_uid" type="integer">2</field>
 				<field index="l18n_parent" type="integer">3</field>
 				<field index="l10n_source" type="integer">3</field>
-				<field index="header">Test content #5 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (french=2)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #5 pid=5 &#039;Dummy with 3 languages, fully translated&#039; (french=2)</field>
             </fieldlist>
 			<related index="rels" type="array">
 				<field index="l18n_parent" type="array">
@@ -563,8 +563,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy with 3 languages, no content [DEFAULT]</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy with 3 languages, no content [DEFAULT]</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -579,8 +579,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy only default language</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy only default language</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -593,8 +593,8 @@
 				<field index="sys_language_uid" type="integer">0</field>
 				<field index="l18n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
-				<field index="header">Test content #1 pid=3 &#039;Dummy only default language&#039; (default language=0)</field>
                 <field index="CType">text</field>
+                <field index="header">Test content #1 pid=3 &#039;Dummy only default language&#039; (default language=0)</field>
             </fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
@@ -609,8 +609,8 @@
 				<field index="l10n_parent" type="integer">0</field>
 				<field index="l10n_source" type="integer">0</field>
 				<field index="perms_everybody" type="integer">15</field>
-				<field index="title">Dummy no content</field>
-				<field index="doktype" type="integer">1</field>
+                <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy no content</field>
 			</fieldlist>
 			<related index="rels" type="array"></related>
 		</tablerow>
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml
index af2513faafd0..a0adad691fbb 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml
@@ -195,8 +195,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -207,12 +207,12 @@
                 <field index="uid_local" type="integer">1</field>
                 <field index="title" type="NULL"></field>
                 <field index="alternative" type="NULL"></field>
-                <field index="description" type="NULL"></field>
-                <field index="link"/>
+                <field index="uid_foreign" type="integer">1</field>
                 <field index="tablenames">tt_content</field>
                 <field index="fieldname">image</field>
-                <field index="uid_foreign" type="integer">1</field>
                 <field index="sorting_foreign" type="integer">0</field>
+                <field index="link"/>
+                <field index="description" type="NULL"></field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="uid_local" type="array">
@@ -233,10 +233,10 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="image" type="integer">1</field>
-                <field index="header_link">file:1</field>
-                <field index="header">Test content</field>
                 <field index="CType">textpic</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:1</field>
+                <field index="image" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -275,8 +275,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -287,8 +287,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -303,11 +303,11 @@
                 <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field>
                 <field index="creation_date">1389878273</field>
                 <field index="modification_date">1389878273</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">1958</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">1958</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
@@ -340,10 +340,12 @@
                 <field index="pid">0</field>
                 <field index="description" type="NULL"></field>
                 <field index="is_public">1</field>
+                <field index="name">fileadmin</field>
                 <field index="is_browsable">1</field>
                 <field index="is_default">0</field>
                 <field index="is_writable">1</field>
                 <field index="is_online">1</field>
+                <field index="driver">Local</field>
                 <field index="configuration">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;
 &lt;T3FlexForms&gt;
 	&lt;data&gt;
@@ -362,8 +364,6 @@
 		&lt;/sheet&gt;
 	&lt;/data&gt;
 &lt;/T3FlexForms&gt;</field>
-                <field index="name">fileadmin</field>
-                <field index="driver">Local</field>
             </fieldlist>
             <related index="rels" type="array"/>
         </tablerow>
@@ -375,10 +375,10 @@
                 <field index="l10n_parent">0</field>
                 <field index="title">Dummy image</field>
                 <field index="alternative">Photo of program code</field>
+                <field index="file">1</field>
                 <field index="description">This is a dummy image.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="file" type="array">
@@ -400,10 +400,10 @@
                 <field index="l10n_parent">1</field>
                 <field index="title">Beispiel Bild</field>
                 <field index="alternative">Foto von Programmcode</field>
+                <field index="file">1</field>
                 <field index="description">Nur ein Beispielbild.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="l10n_parent" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml
index 211263bf1d2d..4c9434a5fc25 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml
@@ -85,8 +85,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -97,11 +97,11 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="pi_flexform">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index=&quot;sDEF&quot;&gt;&lt;language index=&quot;lDEF&quot;&gt;&lt;field index=&quot;flexFormRelation&quot;&gt;&lt;value index=&quot;vDEF&quot;&gt;1&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
-                <field index="header_link"></field>
-                <field index="header">Test content</field>
                 <field index="CType">text</field>
+                <field index="header">Test content</field>
+                <field index="header_link"></field>
                 <field index="list_type"></field>
+                <field index="pi_flexform">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index=&quot;sDEF&quot;&gt;&lt;language index=&quot;lDEF&quot;&gt;&lt;field index=&quot;flexFormRelation&quot;&gt;&lt;value index=&quot;vDEF&quot;&gt;1&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="pi_flexform" type="array">
@@ -126,8 +126,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -138,8 +138,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml
index 438d07a89186..5c27503507b0 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml
@@ -117,8 +117,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -129,11 +129,11 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="pi_flexform">&lt;?xml version="1.0" encoding="utf-8" standalone="yes" ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index="sDEF"&gt;&lt;language index="lDEF"&gt;&lt;field index="settings.persistenceIdentifier"&gt;&lt;value index="vDEF"&gt;1:/form_definitions/flexFormWithSoftReference.form.yaml&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
-                <field index="header_link"></field>
-                <field index="header">Test content</field>
                 <field index="CType">form_formframework</field>
+                <field index="header">Test content</field>
+                <field index="header_link"></field>
                 <field index="list_type"></field>
+                <field index="pi_flexform">&lt;?xml version="1.0" encoding="utf-8" standalone="yes" ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index="sDEF"&gt;&lt;language index="lDEF"&gt;&lt;field index="settings.persistenceIdentifier"&gt;&lt;value index="vDEF"&gt;1:/form_definitions/flexFormWithSoftReference.form.yaml&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="pi_flexform" type="array">
@@ -168,8 +168,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -180,8 +180,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -196,11 +196,11 @@
                 <field index="sha1">4acd754cee5861bb543870fae76df5d35c0a0e5b</field>
                 <field index="creation_date">1628060459</field>
                 <field index="modification_date">1628060459</field>
-                <field index="mime_type">text/plain</field>
-                <field index="metadata">0</field>
-                <field index="size">501</field>
                 <field index="storage">1</field>
                 <field index="type">1</field>
+                <field index="mime_type">text/plain</field>
+                <field index="size">501</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml
index ef981ed2c840..74c1241f1747 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml
@@ -195,8 +195,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -207,12 +207,12 @@
                 <field index="uid_local" type="integer">1</field>
                 <field index="title" type="NULL"></field>
                 <field index="alternative" type="NULL"></field>
-                <field index="description" type="NULL"></field>
-                <field index="link"/>
+                <field index="uid_foreign" type="integer">1</field>
                 <field index="tablenames">tt_content</field>
                 <field index="fieldname">image</field>
-                <field index="uid_foreign" type="integer">1</field>
                 <field index="sorting_foreign" type="integer">0</field>
+                <field index="link"/>
+                <field index="description" type="NULL"></field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="uid_local" type="array">
@@ -233,10 +233,10 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="image" type="integer">1</field>
-                <field index="header_link">file:1</field>
-                <field index="header">Test content</field>
                 <field index="CType">textpic</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:1</field>
+                <field index="image" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -275,8 +275,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -287,8 +287,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -303,11 +303,11 @@
                 <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field>
                 <field index="creation_date">1389878273</field>
                 <field index="modification_date">1389878273</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">7958</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">7958</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
@@ -340,10 +340,12 @@
                 <field index="pid">0</field>
                 <field index="description" type="NULL"></field>
                 <field index="is_public">1</field>
+                <field index="name">fileadmin</field>
                 <field index="is_browsable">1</field>
                 <field index="is_default">0</field>
                 <field index="is_writable">1</field>
                 <field index="is_online">1</field>
+                <field index="driver">Local</field>
                 <field index="configuration">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;
 &lt;T3FlexForms&gt;
 	&lt;data&gt;
@@ -362,8 +364,6 @@
 		&lt;/sheet&gt;
 	&lt;/data&gt;
 &lt;/T3FlexForms&gt;</field>
-                <field index="name">fileadmin</field>
-                <field index="driver">Local</field>
             </fieldlist>
             <related index="rels" type="array"/>
         </tablerow>
@@ -375,10 +375,10 @@
                 <field index="l10n_parent">0</field>
                 <field index="title">Dummy image</field>
                 <field index="alternative">Photo of program code</field>
+                <field index="file">1</field>
                 <field index="description">This is a dummy image.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="file" type="array">
@@ -400,10 +400,10 @@
                 <field index="l10n_parent">1</field>
                 <field index="title">Beispiel Bild</field>
                 <field index="alternative">Foto von Programmcode</field>
+                <field index="file">1</field>
                 <field index="description">Nur ein Beispielbild.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="l10n_parent" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml
index a81bd2c0db18..a337b36c0d0f 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml
@@ -195,8 +195,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -207,12 +207,12 @@
                 <field index="uid_local" type="integer">1</field>
                 <field index="title" type="NULL"></field>
                 <field index="alternative" type="NULL"></field>
-                <field index="description" type="NULL"></field>
-                <field index="link"/>
+                <field index="uid_foreign" type="integer">1</field>
                 <field index="tablenames">tt_content</field>
                 <field index="fieldname">image</field>
-                <field index="uid_foreign" type="integer">1</field>
                 <field index="sorting_foreign" type="integer">0</field>
+                <field index="link"/>
+                <field index="description" type="NULL"></field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="uid_local" type="array">
@@ -233,10 +233,10 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="image" type="integer">1</field>
-                <field index="header_link">file:1</field>
-                <field index="header">Test content</field>
                 <field index="CType">textpic</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:1</field>
+                <field index="image" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -275,8 +275,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -287,8 +287,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -303,11 +303,11 @@
                 <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field>
                 <field index="creation_date">1389878273</field>
                 <field index="modification_date">1389878273</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">7958</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">7958</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
@@ -340,10 +340,12 @@
                 <field index="pid">0</field>
                 <field index="description" type="NULL"></field>
                 <field index="is_public">1</field>
+                <field index="name">fileadmin</field>
                 <field index="is_browsable">1</field>
                 <field index="is_default">0</field>
                 <field index="is_writable">1</field>
                 <field index="is_online">1</field>
+                <field index="driver">Local</field>
                 <field index="configuration">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;
 &lt;T3FlexForms&gt;
 	&lt;data&gt;
@@ -362,8 +364,6 @@
 		&lt;/sheet&gt;
 	&lt;/data&gt;
 &lt;/T3FlexForms&gt;</field>
-                <field index="name">fileadmin</field>
-                <field index="driver">Local</field>
             </fieldlist>
             <related index="rels" type="array"/>
         </tablerow>
@@ -375,10 +375,10 @@
                 <field index="l10n_parent">0</field>
                 <field index="title">Dummy image</field>
                 <field index="alternative">Photo of program code</field>
+                <field index="file">1</field>
                 <field index="description">This is a dummy image.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="file" type="array">
@@ -400,10 +400,10 @@
                 <field index="l10n_parent">1</field>
                 <field index="title">Beispiel Bild</field>
                 <field index="alternative">Foto von Programmcode</field>
+                <field index="file">1</field>
                 <field index="description">Nur ein Beispielbild.</field>
                 <field index="width">400</field>
                 <field index="height">300</field>
-                <field index="file">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="l10n_parent" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml
index a3556f22bc23..0a5a17fa6415 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml
@@ -128,8 +128,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -140,11 +140,11 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="pi_flexform">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index=&quot;sDEF&quot;&gt;&lt;language index=&quot;lDEF&quot;&gt;&lt;field index=&quot;softrefLink&quot;&gt;&lt;value index=&quot;vDEF&quot;&gt;t3://page?uid=2&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
-                <field index="header_link">file:1</field>
-                <field index="header">Test content</field>
                 <field index="CType">text</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:1</field>
                 <field index="list_type"></field>
+                <field index="pi_flexform">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt;&lt;T3FlexForms&gt;&lt;data&gt;&lt;sheet index=&quot;sDEF&quot;&gt;&lt;language index=&quot;lDEF&quot;&gt;&lt;field index=&quot;softrefLink&quot;&gt;&lt;value index=&quot;vDEF&quot;&gt;t3://page?uid=2&lt;/value&gt;&lt;/field&gt;&lt;/language&gt;&lt;/sheet&gt;&lt;/data&gt;&lt;/T3FlexForms&gt;</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -197,8 +197,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -209,8 +209,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -225,11 +225,11 @@
                 <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field>
                 <field index="creation_date">1389878273</field>
                 <field index="modification_date">1389878273</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">7958</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">7958</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml
index 26dfb9158e33..2b60a3c1ed5c 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml
@@ -173,8 +173,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Root</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Root</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -185,9 +185,9 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="header_link">file:2</field>
-                <field index="header">Test content</field>
                 <field index="CType">text</field>
+                <field index="header">Test content</field>
+                <field index="header_link">file:2</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -217,9 +217,9 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="header_link">file:4</field>
-                <field index="header">Test content 2</field>
                 <field index="CType">text</field>
+                <field index="header">Test content 2</field>
+                <field index="header_link">file:4</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -248,9 +248,9 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="t3ver_oid" type="integer">0</field>
-                <field index="header_link">file:3</field>
-                <field index="header">Test content 3</field>
                 <field index="CType">text</field>
+                <field index="header">Test content 3</field>
+                <field index="header_link">file:3</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="header_link" type="array">
@@ -280,8 +280,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">1</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-3</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-3</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -292,8 +292,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">Dummy 1-2</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">Dummy 1-2</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -308,11 +308,11 @@
                 <field index="sha1">e873c1e2ffd0f191e183a1057de3eef4d62e782d</field>
                 <field index="creation_date">1393346082</field>
                 <field index="modification_date">1392907534</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">5565</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">5565</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
@@ -337,11 +337,11 @@
                 <field index="sha1">c3511df85d21bc578faf71c6a19eeb3ff44af370</field>
                 <field index="creation_date">1393432184</field>
                 <field index="modification_date">1393432183</field>
-                <field index="mime_type">image/jpeg</field>
-                <field index="metadata">0</field>
-                <field index="size">7425</field>
                 <field index="storage">1</field>
                 <field index="type">2</field>
+                <field index="mime_type">image/jpeg</field>
+                <field index="size">7425</field>
+                <field index="metadata">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="storage" type="array">
diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml
index 59a32c963756..67a8f386452a 100644
--- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml
+++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml
@@ -710,8 +710,8 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="perms_everybody" type="integer">15</field>
-                <field index="title">IRRE</field>
                 <field index="doktype" type="integer">1</field>
+                <field index="title">IRRE</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -722,10 +722,10 @@
                 <field index="deleted" type="integer">0</field>
                 <field index="hidden" type="integer">0</field>
                 <field index="t3ver_oid" type="integer">0</field>
+                <field index="CType">text</field>
                 <field index="header">Test content</field>
                 <field index="tx_testirrecsv_hotels">1,2</field>
                 <field index="tx_testirreforeignfield_hotels" type="integer">2</field>
-                <field index="CType">text</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="tx_testirrecsv_hotels" type="array">
@@ -1282,8 +1282,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">223.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1297,8 +1297,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price 1.2.2 (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">567.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1312,8 +1312,8 @@
                 <field index="sys_language_uid" type="integer">0</field>
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="title">Price 1.1.1 (m:n (MM) ASym)</field>
-                <field index="offers" type="integer">0</field>
                 <field index="price">567.00</field>
+                <field index="offers" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array"></related>
         </tablerow>
@@ -1355,9 +1355,9 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">2</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="prices" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">2</field>
+                <field index="prices" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1399,9 +1399,9 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="prices" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">1</field>
+                <field index="prices" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1569,10 +1569,10 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="allincl" type="integer">1</field>
                 <field index="hotelid" type="integer">1</field>
                 <field index="offerid" type="integer">1</field>
                 <field index="quality" type="integer">2</field>
+                <field index="allincl" type="integer">1</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
@@ -1605,10 +1605,10 @@
                 <field index="l18n_parent" type="integer">0</field>
                 <field index="hotelsort" type="integer">1</field>
                 <field index="offersort" type="integer">1</field>
-                <field index="allincl" type="integer">0</field>
                 <field index="hotelid" type="integer">2</field>
                 <field index="offerid" type="integer">2</field>
                 <field index="quality" type="integer">4</field>
+                <field index="allincl" type="integer">0</field>
             </fieldlist>
             <related index="rels" type="array">
                 <field index="hotelid" type="array">
-- 
GitLab