Database: Obey locale-specific utf8
collation settings.
Some sites prefer to use locale-specific location settings. For example, the Swedish WordPress package use `utf8_swedish_ci`, instead of `utf8_unicode_ci`. When upgrading the connection to `utf8mb4`, we were overriding this to be `utf8mb4_unicode_ci`, instead of maintaining the use of the `_swedish_ci` variant. The locale-specific collations do have extra collation rules just for that language, so it's useful to maintain compatibility. Fixes #32405. git-svn-id: https://develop.svn.wordpress.org/trunk@37521 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
e9bed0f3a5
commit
4422aac17c
@ -757,8 +757,13 @@ class wpdb {
|
||||
$this->charset = 'utf8mb4';
|
||||
}
|
||||
|
||||
if ( 'utf8mb4' === $this->charset && ( ! $this->collate || stripos( $this->collate, 'utf8_' ) === 0 ) ) {
|
||||
$this->collate = 'utf8mb4_unicode_ci';
|
||||
if ( 'utf8mb4' === $this->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';
|
||||
} else {
|
||||
$this->collate = str_replace( 'utf8_', 'utf8mb4_', $this->collate );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -955,4 +955,25 @@ class Tests_DB extends WP_UnitTestCase {
|
||||
|
||||
$wpdb->check_connection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 32405
|
||||
*/
|
||||
function test_non_unicode_collations() {
|
||||
global $wpdb;
|
||||
|
||||
if ( ! $wpdb->has_cap( 'utf8mb4' ) ) {
|
||||
$this->markTestSkipped( 'This test requires utf8mb4 support' );
|
||||
}
|
||||
|
||||
$charset = $wpdb->charset;
|
||||
$collate = $wpdb->collate;
|
||||
|
||||
$wpdb->init_charset( 'utf8', 'utf8_swedish_ci' );
|
||||
|
||||
$this->assertSame( 'utf8mb4', $wpdb->charset );
|
||||
$this->assertSame( 'utf8mb4_swedish_ci', $wpdb->collate );
|
||||
|
||||
$wpdb->init_charset( $charset, $collate );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user