diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php
index d3b644498796b8b24a8ae7a5e39f5e60c2e18594..9e36ad0cd57e6aba2dd0b338698407c7ebeba752 100644
--- a/lib/private/AppConfig.php
+++ b/lib/private/AppConfig.php
@@ -202,12 +202,9 @@ class AppConfig implements IAppConfig {
 
 		$sql = $this->conn->getQueryBuilder();
 		$sql->update('appconfig')
-			->set('configvalue', $sql->createParameter('configvalue'))
-			->where($sql->expr()->eq('appid', $sql->createParameter('app')))
-			->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey')))
-			->setParameter('configvalue', $value)
-			->setParameter('app', $app)
-			->setParameter('configkey', $key);
+			->set('configvalue', $sql->createNamedParameter($value))
+			->where($sql->expr()->eq('appid', $sql->createNamedParameter($app)))
+			->andWhere($sql->expr()->eq('configkey', $sql->createNamedParameter($key)));
 
 		/*
 		 * Only limit to the existing value for non-Oracle DBs:
@@ -215,9 +212,25 @@ class AppConfig implements IAppConfig {
 		 * > Large objects (LOBs) are not supported in comparison conditions.
 		 */
 		if (!($this->conn instanceof OracleConnection)) {
-			// Only update the value when it is not the same
-			$sql->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue')))
-				->setParameter('configvalue', $value);
+
+			/*
+			 * Only update the value when it is not the same
+			 * Note that NULL requires some special handling. Since comparing
+			 * against null can have special results.
+			 */
+
+			if ($value === null) {
+				$sql->andWhere(
+					$sql->expr()->isNotNull('configvalue')
+				);
+			} else {
+				$sql->andWhere(
+					$sql->expr()->orX(
+						$sql->expr()->isNull('configvalue'),
+						$sql->expr()->neq('configvalue', $sql->createNamedParameter($value))
+					)
+				);
+			}
 		}
 
 		$changedRow = (bool) $sql->execute();