From 703e2970bc292a2d290973891c177ef22b6e7ed1 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Sun, 15 Feb 2026 23:10:30 +0100 Subject: [PATCH 1/2] Add support for `JSON` database column type --- .../column/JsonDatabaseTableColumn.class.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 wcfsetup/install/files/lib/system/database/table/column/JsonDatabaseTableColumn.class.php 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'; +} From 5a516ecbe381669dc3e85572923e165848178049 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Sun, 15 Feb 2026 23:42:21 +0100 Subject: [PATCH 2/2] Workaround for updates of `json` database columns in MariaDB see https://mariadb.com/docs/server/reference/data-types/string-data-types/json --- .../table/DatabaseTableChangeProcessor.class.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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." );