diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb
index cc8564320..36c819826 100644
--- a/lib/active_record/connection_adapters/sqlserver_adapter.rb
+++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -376,7 +376,7 @@ def dblib_connect(config)
         TinyTds::Client.new(
           dataserver: config[:dataserver],
           host: config[:host],
-          port: config[:port],
+          port: config_port(config),
           username: config[:username],
           password: config[:password],
           database: config[:database],
@@ -385,8 +385,10 @@ def dblib_connect(config)
           login_timeout: config_login_timeout(config),
           timeout: config_timeout(config),
           encoding:  config_encoding(config),
-          azure: config[:azure],
-          contained: config[:contained]
+          azure: config_azure(config),
+          contained: config_contained(config),
+          use_utf16: config_use_utf16(config),
+          message_handler: config_message_handler(config)
         ).tap do |client|
           if config[:azure]
             client.execute('SET ANSI_NULLS ON').do
@@ -408,6 +410,10 @@ def config_appname(config)
         config[:appname] || configure_application_name || Rails.application.class.name.split('::').first rescue nil
       end
 
+      def config_port(config)
+        config[:port].present? ? config[:port].to_i : nil
+      end
+
       def config_login_timeout(config)
         config[:login_timeout].present? ? config[:login_timeout].to_i : nil
       end
@@ -420,6 +426,22 @@ def config_encoding(config)
         config[:encoding].present? ? config[:encoding] : nil
       end
 
+      def config_azure(config)
+        config[:azure].present? ? !!ActiveModel::Type::Boolean.new.cast(config[:azure]) : nil
+      end
+
+      def config_contained(config)
+        config[:contained].present? ? !!ActiveModel::Type::Boolean.new.cast(config[:contained]) : nil
+      end
+
+      def config_use_utf16(config)
+        config[:use_utf16].present? ? !!ActiveModel::Type::Boolean.new.cast(config[:use_utf16]) : true
+      end
+
+      def config_message_handler(config)
+        config[:message_handler].present? ? config[:message_handler] : nil
+      end
+
       def configure_connection ; end
 
       def configure_application_name ; end