]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/wp-db.php
WordPress 4.6.2
[autoinstalls/wordpress.git] / wp-includes / wp-db.php
index 2f8dbcf96968353f799f6fab46a737f408c762e4..8057bcc04e7aa2df533283ea471d02491da19faf 100644 (file)
@@ -734,6 +734,9 @@ class wpdb {
         * @since 3.1.0
         */
        public function init_charset() {
+               $charset = '';
+               $collate = '';
+
                if ( function_exists('is_multisite') && is_multisite() ) {
                        $charset = 'utf8';
                        if ( defined( 'DB_COLLATE' ) && DB_COLLATE ) {
@@ -776,6 +779,11 @@ class wpdb {
                        $charset = 'utf8mb4';
                }
 
+               if ( 'utf8mb4' === $charset && ! $this->has_cap( 'utf8mb4' ) ) {
+                       $charset = 'utf8';
+                       $collate = str_replace( 'utf8mb4_', 'utf8_', $collate );
+               }
+
                if ( 'utf8mb4' === $charset ) {
                        // _general_ is outdated, so we can upgrade it to _unicode_, instead.
                        if ( ! $collate || 'utf8_general_ci' === $collate ) {
@@ -808,22 +816,29 @@ class wpdb {
                if ( ! isset( $collate ) )
                        $collate = $this->collate;
                if ( $this->has_cap( 'collation' ) && ! empty( $charset ) ) {
+                       $set_charset_succeeded = true;
+
                        if ( $this->use_mysqli ) {
                                if ( function_exists( 'mysqli_set_charset' ) && $this->has_cap( 'set_charset' ) ) {
-                                       mysqli_set_charset( $dbh, $charset );
+                                       $set_charset_succeeded = mysqli_set_charset( $dbh, $charset );
+                               }
+
+                               if ( $set_charset_succeeded ) {
+                                       $query = $this->prepare( 'SET NAMES %s', $charset );
+                                       if ( ! empty( $collate ) )
+                                               $query .= $this->prepare( ' COLLATE %s', $collate );
+                                       mysqli_query( $dbh, $query );
                                }
-                               $query = $this->prepare( 'SET NAMES %s', $charset );
-                               if ( ! empty( $collate ) )
-                                       $query .= $this->prepare( ' COLLATE %s', $collate );
-                               mysqli_query( $dbh, $query );
                        } else {
                                if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset' ) ) {
-                                       mysql_set_charset( $charset, $dbh );
+                                       $set_charset_succeeded = mysql_set_charset( $charset, $dbh );
+                               }
+                               if ( $set_charset_succeeded ) {
+                                       $query = $this->prepare( 'SET NAMES %s', $charset );
+                                       if ( ! empty( $collate ) )
+                                               $query .= $this->prepare( ' COLLATE %s', $collate );
+                                       mysql_query( $query, $dbh );
                                }
-                               $query = $this->prepare( 'SET NAMES %s', $charset );
-                               if ( ! empty( $collate ) )
-                                       $query .= $this->prepare( ' COLLATE %s', $collate );
-                               mysql_query( $query, $dbh );
                        }
                }
        }