diff --git a/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs b/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs
new file mode 100644
index 000000000..79d0adaee
--- /dev/null
+++ b/src/NzbDrone.Core.Test/Datastore/Converters/TimeSpanConverterFixture.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Data.SQLite;
+using FluentAssertions;
+using NUnit.Framework;
+using NzbDrone.Core.Datastore.Converters;
+using NzbDrone.Core.Test.Framework;
+
+namespace NzbDrone.Core.Test.Datastore.Converters;
+
+[TestFixture]
+public class TimeSpanConverterFixture : CoreTest<TimeSpanConverter>
+{
+    private SQLiteParameter _param;
+
+    [SetUp]
+    public void Setup()
+    {
+        _param = new SQLiteParameter();
+    }
+
+    [Test]
+    public void should_return_string_when_saving_timespan_to_db()
+    {
+        var span = TimeSpan.FromMilliseconds(10);
+
+        Subject.SetValue(_param, span);
+        _param.Value.Should().Be(span.ToString());
+    }
+
+    [Test]
+    public void should_return_timespan_when_getting_string_from_db()
+    {
+        var span = TimeSpan.FromMilliseconds(10);
+
+        Subject.Parse(span.ToString()).Should().Be(span);
+    }
+
+    [Test]
+    public void should_return_zero_timespan_for_db_null_value_when_getting_from_db()
+    {
+        Subject.Parse(null).Should().Be(TimeSpan.Zero);
+    }
+}
diff --git a/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs b/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs
index 902a26009..fdcb227c6 100644
--- a/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs
+++ b/src/NzbDrone.Core/Datastore/Converters/TimeSpanConverter.cs
@@ -2,18 +2,17 @@ using System;
 using System.Data;
 using Dapper;
 
-namespace NzbDrone.Core.Datastore.Converters
+namespace NzbDrone.Core.Datastore.Converters;
+
+public class TimeSpanConverter : SqlMapper.TypeHandler<TimeSpan>
 {
-    public class DapperTimeSpanConverter : SqlMapper.TypeHandler<TimeSpan>
+    public override void SetValue(IDbDataParameter parameter, TimeSpan value)
     {
-        public override void SetValue(IDbDataParameter parameter, TimeSpan value)
-        {
-            parameter.Value = value.ToString();
-        }
+        parameter.Value = value.ToString();
+    }
 
-        public override TimeSpan Parse(object value)
-        {
-            return TimeSpan.Parse((string)value);
-        }
+    public override TimeSpan Parse(object value)
+    {
+        return value is string str ? TimeSpan.Parse(str) : TimeSpan.Zero;
     }
 }
diff --git a/src/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs
index df2296951..8cc4c7702 100644
--- a/src/NzbDrone.Core/Datastore/TableMapping.cs
+++ b/src/NzbDrone.Core/Datastore/TableMapping.cs
@@ -217,7 +217,6 @@ namespace NzbDrone.Core.Datastore
 
             SqlMapper.RemoveTypeMap(typeof(DateTime));
             SqlMapper.AddTypeHandler(new DapperUtcConverter());
-            SqlMapper.AddTypeHandler(new DapperTimeSpanConverter());
             SqlMapper.AddTypeHandler(new DapperQualityIntConverter());
             SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<QualityProfileQualityItem>>(new QualityIntConverter()));
             SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<ProfileFormatItem>>(new CustomFormatIntConverter()));
@@ -241,6 +240,9 @@ namespace NzbDrone.Core.Datastore
             SqlMapper.RemoveTypeMap(typeof(Guid));
             SqlMapper.RemoveTypeMap(typeof(Guid?));
             SqlMapper.AddTypeHandler(new GuidConverter());
+            SqlMapper.RemoveTypeMap(typeof(TimeSpan));
+            SqlMapper.RemoveTypeMap(typeof(TimeSpan?));
+            SqlMapper.AddTypeHandler(new TimeSpanConverter());
             SqlMapper.AddTypeHandler(new CommandConverter());
             SqlMapper.AddTypeHandler(new SystemVersionConverter());
         }