diff --git a/wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php b/wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php index 388f63941e..2ca4d6fccc 100644 --- a/wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php +++ b/wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php @@ -796,6 +796,18 @@ private function diffColumns(IDatabaseTableColumn $oldColumn, IDatabaseTableColu } } + if (isset($diff['type'])) { + // In MariaDB JSON is an alias for LONGTEXT COLLATE utf8mb4_bin + // introduced for compatibility reasons with MySQL's JSON data type. + if ( + $oldColumn->getType() === 'longtext' + && $newColumn->getType() === 'json' + && \stripos(WCF::getDB()->getVersion(), 'MariaDB') !== false + ) { + unset($diff['type']); + } + } + if ($diff !== []) { return true; } @@ -811,7 +823,7 @@ private function diffColumns(IDatabaseTableColumn $oldColumn, IDatabaseTableColu ) { \assert( ($oldColumn instanceof IDefaultValueDatabaseTableColumn) - === ($newColumn instanceof IDefaultValueDatabaseTableColumn), + === ($newColumn instanceof IDefaultValueDatabaseTableColumn), "Default support must be identical, because different types have been rejected above." ); diff --git a/wcfsetup/install/files/lib/system/database/table/column/JsonDatabaseTableColumn.class.php b/wcfsetup/install/files/lib/system/database/table/column/JsonDatabaseTableColumn.class.php new file mode 100644 index 0000000000..d31a298fcc --- /dev/null +++ b/wcfsetup/install/files/lib/system/database/table/column/JsonDatabaseTableColumn.class.php @@ -0,0 +1,19 @@ + + * @since 6.3 + */ +final class JsonDatabaseTableColumn extends AbstractDatabaseTableColumn +{ + /** + * @inheritDoc + */ + protected string $type = 'json'; +}