Index: src/wp-includes/wp-db.php
===================================================================
--- src/wp-includes/wp-db.php	(revision 37580)
+++ src/wp-includes/wp-db.php	(working copy)
@@ -735,41 +735,57 @@
 	 */
 	public function init_charset() {
 		if ( function_exists('is_multisite') && is_multisite() ) {
-			$this->charset = 'utf8';
+			$charset = 'utf8';
 			if ( defined( 'DB_COLLATE' ) && DB_COLLATE ) {
-				$this->collate = DB_COLLATE;
+				$collate = DB_COLLATE;
 			} else {
-				$this->collate = 'utf8_general_ci';
+				$collate = 'utf8_general_ci';
 			}
 		} elseif ( defined( 'DB_COLLATE' ) ) {
-			$this->collate = DB_COLLATE;
+			$collate = DB_COLLATE;
 		}
 
 		if ( defined( 'DB_CHARSET' ) ) {
-			$this->charset = DB_CHARSET;
+			$charset = DB_CHARSET;
 		}
 
+		list( $this->charset, $this->collate ) = $this->determine_charset( $charset, $collate );
+	}
+
+	/**
+	 * Given a charset and collation, determine the best charset and collation to use.
+	 *
+	 * For example, when able, utf8mb4 should be used instead of utf8.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param  string $charset The character set to check.
+	 * @param  string $collate The collation to check.
+	 */
+	public function determine_charset( $charset, $collate ) {
 		if ( ( $this->use_mysqli && ! ( $this->dbh instanceof mysqli ) ) || empty( $this->dbh ) ) {
-			return;
+			return array( $charset, $collate );
 		}
 
-		if ( 'utf8' === $this->charset && $this->has_cap( 'utf8mb4' ) ) {
-			$this->charset = 'utf8mb4';
+		if ( 'utf8' === $charset && $this->has_cap( 'utf8mb4' ) ) {
+			$charset = 'utf8mb4';
 		}
 
-		if ( 'utf8mb4' === $this->charset ) {
+		if ( 'utf8mb4' === $charset ) {
 			// _general_ is outdated, so we can upgrade it to _unicode_, instead.
-			if ( ! $this->collate || 'utf8_general_ci' === $this->collate ) {
-				$this->collate = 'utf8mb4_unicode_ci';
+			if ( ! $collate || 'utf8_general_ci' === $collate ) {
+				$collate = 'utf8mb4_unicode_ci';
 			} else {
-				$this->collate = str_replace( 'utf8_', 'utf8mb4_', $this->collate );
+				$collate = str_replace( 'utf8_', 'utf8mb4_', $collate );
 			}
 		}
 
 		// _unicode_520_ is a better collation, we should use that when it's available.
-		if ( $this->has_cap( 'utf8mb4_520' ) && 'utf8mb4_unicode_ci' === $this->collate ) {
-			$this->collate = 'utf8mb4_unicode_520_ci';
+		if ( $this->has_cap( 'utf8mb4_520' ) && 'utf8mb4_unicode_ci' === $collate ) {
+			$collate = 'utf8mb4_unicode_520_ci';
 		}
+
+		return array( $charset, $collate );
 	}
 
 	/**
Index: tests/phpunit/tests/db.php
===================================================================
--- tests/phpunit/tests/db.php	(revision 37580)
+++ tests/phpunit/tests/db.php	(working copy)
@@ -955,4 +955,22 @@
 
 		$wpdb->check_connection();
 	}
+
+	/**
+	 * @ticket 36917
+	 */
+	function test_charset_not_determined_when_disconnected() {
+		global $wpdb;
+
+		$charset = 'utf8';
+		$collate = 'this_isnt_a_collation';
+
+		$wpdb->close();
+
+		$result = $wpdb->determine_charset( $charset, $collate );
+
+		$this->assertSame( array( $charset, $collate ), $result );
+
+		$wpdb->check_connection();
+	}
 }
