* @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 ) {
$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 ) {
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 );
}
}
}