[LOG4J2-2762] [JDBC] MS-SQL Server JDBC driver throws SQLServerException
when inserting a null value for a VARBINARY column.
diff --git a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
index e2f2be5..ff7baa4 100644
--- a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
+++ b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
@@ -677,7 +677,13 @@
      * Sets the given Object in the prepared statement. The value is truncated if needed.
      */
     private void setStatementObject(final int j, final String nameKey, final Object value) throws SQLException {
-        statement.setObject(j, truncate(nameKey, value));
+        if (value == null) {
+            // [LOG4J2-2762] [JDBC] MS-SQL Server JDBC driver throws SQLServerException when inserting a null value for a VARBINARY column.
+            // Calling setNull() instead of setObject() for null values fixes [LOG4J2-2762]. 
+            this.statement.setNull(j, columnMetaData.get(nameKey).getType());
+        } else {
+            statement.setObject(j, truncate(nameKey, value));
+        }
     }
 
     @Override
@@ -748,12 +754,7 @@
                         } else {
                             final Object value = TypeConverters.convert(layout.toSerializable(event), mapping.getType(),
                                     null);
-                            if (value == null) {
-                                // TODO We might need to always initialize the columnMetaData to specify the type.
-                                this.statement.setNull(j++, Types.NULL);
-                            } else {
-                                setStatementObject(j++, mapping.getNameKey(), value);
-                            }
+                            setStatementObject(j++, mapping.getNameKey(), value);
                         }
                     }
                 }
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d1175e1..f47cfa8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -199,6 +199,9 @@
       <action issue="LOG4J2-2754" dev="ckozak" type="fix">
         LoaderUtil.getClassLoaders may discover additional loaders and no longer erroneously returns a result with a null element in some environments.
       </action>
+      <action issue="LOG4J2-2762" dev="ggregory" type="fix" due-to="Gary Gregory">
+        [JDBC] MS-SQL Server JDBC driver throws SQLServerException when inserting a null value for a VARBINARY column.
+      </action>
     </release>
     <release version="2.13.0" date="2019-12-11" description="GA Release 2.13.0">
       <action issue="LOG4J2-2058" dev="rgoers" type="fix">