diff --git a/src/wp-includes/wp-db.php b/src/wp-includes/wp-db.php index 066e851fa3..c2e576ced2 100644 --- a/src/wp-includes/wp-db.php +++ b/src/wp-includes/wp-db.php @@ -780,21 +780,19 @@ class wpdb { if ( $this->use_mysqli ) { if ( function_exists( 'mysqli_set_charset' ) && $this->has_cap( 'set_charset' ) ) { mysqli_set_charset( $dbh, $charset ); - } else { - $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 ); - } else { - $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 ); } } } diff --git a/tests/phpunit/tests/db/charset.php b/tests/phpunit/tests/db/charset.php index 584a62886e..97d9b26b7d 100644 --- a/tests/phpunit/tests/db/charset.php +++ b/tests/phpunit/tests/db/charset.php @@ -16,7 +16,7 @@ class Tests_DB_Charset extends WP_UnitTestCase { public static function setUpBeforeClass() { require_once( dirname( dirname( __FILE__ ) ) . '/db.php' ); - + self::$_wpdb = new wpdb_exposed_methods_for_testing(); } @@ -891,4 +891,19 @@ class Tests_DB_Charset extends WP_UnitTestCase { $this->assertEquals( $safe_query, $stripped_query ); } + + /** + * @ticket 36649 + */ + function test_set_charset_changes_the_connection_collation() { + self::$_wpdb->set_charset( self::$_wpdb->dbh, 'utf8', 'utf8_general_ci' ); + $results = self::$_wpdb->get_results( "SHOW VARIABLES WHERE Variable_name='collation_connection'" ); + $this->assertEquals( 'utf8_general_ci', $results[0]->Value ); + + self::$_wpdb->set_charset( self::$_wpdb->dbh, 'utf8mb4', 'utf8mb4_unicode_ci' ); + $results = self::$_wpdb->get_results( "SHOW VARIABLES WHERE Variable_name='collation_connection'" ); + $this->assertEquals( 'utf8mb4_unicode_ci', $results[0]->Value ); + + self::$_wpdb->set_charset( self::$_wpdb->dbh ); + } }