diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa6ecea..d544879 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
 
+## [3.2.1] - 2024-10-17
+### Added
+* *Nothing*
+
+### Changed
+* *Nothing*
+
+### Deprecated
+* *Nothing*
+
+### Removed
+* *Nothing*
+
+### Fixed
+* Fix regression where `loadEnvVarsFromConfig` defines env vars with null value as empty instead of skipping them entirely.
+
+
 ## [3.2.0] - 2024-10-14
 ### Added
 * Expose new `loadEnvVarsFromConfig` function to use instead of `EnvVarLoaderProvider`.
diff --git a/functions/functions.php b/functions/functions.php
index c853561..3214754 100644
--- a/functions/functions.php
+++ b/functions/functions.php
@@ -48,11 +48,11 @@ function parseEnvVar(string $value): string|int|bool|null
 /**
  * @param string|string[]|int|int[]|bool|null $value
  */
-function formatEnvVarValue(string|int|bool|array|null $value): string
+function formatEnvVarValueOrNull(string|int|bool|array|null $value): string|null
 {
     $isArray = is_array($value);
     if (! $isArray && ! is_scalar($value)) {
-        return '';
+        return null;
     }
 
     return $isArray ? implode(',', $value) : match ($value) {
@@ -62,6 +62,14 @@ function formatEnvVarValue(string|int|bool|array|null $value): string
     };
 }
 
+/**
+ * @param string|string[]|int|int[]|bool|null $value
+ */
+function formatEnvVarValue(string|int|bool|array|null $value): string
+{
+    return formatEnvVarValueOrNull($value) ?? '';
+}
+
 /**
  * Loads config from $configPath, then puts all its values as env vars if they are not yet defined
  */
@@ -83,7 +91,11 @@ function putNotYetDefinedEnv(string $key, mixed $value): void
         return;
     }
 
-    $formattedValue = formatEnvVarValue($value);
+    $formattedValue = formatEnvVarValueOrNull($value);
+    if ($formattedValue === null) {
+        return;
+    }
+
     putenv(sprintf('%s=%s', $key, $formattedValue));
 }
 
diff --git a/test/Functions/FormatEnvVarValueTest.php b/test/Functions/FormatEnvVarValueTest.php
index 8fe74cc..fe435f3 100644
--- a/test/Functions/FormatEnvVarValueTest.php
+++ b/test/Functions/FormatEnvVarValueTest.php
@@ -9,6 +9,7 @@
 use PHPUnit\Framework\TestCase;
 
 use function Shlinkio\Shlink\Config\formatEnvVarValue;
+use function Shlinkio\Shlink\Config\formatEnvVarValueOrNull;
 
 class FormatEnvVarValueTest extends TestCase
 {
@@ -23,5 +24,6 @@ class FormatEnvVarValueTest extends TestCase
     public function valuesAreFormattedAsExpected(string|int|bool|array|null $value, string $expectedResult): void
     {
         self::assertEquals($expectedResult, formatEnvVarValue($value));
+        self::assertEquals($value === null ? null : $expectedResult, formatEnvVarValueOrNull($value));
     }
 }
diff --git a/test/Functions/LoadEnvVarsFromConfigTest.php b/test/Functions/LoadEnvVarsFromConfigTest.php
index 94ac357..1eb9e77 100644
--- a/test/Functions/LoadEnvVarsFromConfigTest.php
+++ b/test/Functions/LoadEnvVarsFromConfigTest.php
@@ -53,6 +53,6 @@ public function putsExpectedEnvVars(): void
         self::assertFalse(getenv('foo2'));
         self::assertEquals('3', getenv('NUMBER'));
         self::assertEquals(3, env('NUMBER'));
-        self::assertEquals('', env('NULL'));
+        self::assertNull(env('NULL'));
     }
 }