maybe_convert_table_to_utf8mb4() WP 4.2.0

Конвертує поля таблиці в кодування utf8mb4_unicode_ci , якщо в таблиці є поля з кодуванням utf8_* або utf8mb4_* .

Змінити кодування всіх рядкових полів таблиці на utf8mb4_unicode_ci тільки в тому випадку, якщо:

  1. Таблиця існує;
  2. Порівняння всіх полів дорівнює: (числові поля) або починається з ‘utf8’ або ‘utf8mb4’ (рядкові поля);
  3. Порівняння самої таблиці не починається з utf8mb4.

В інших випадках функція нічого не зробить.

Функція не визначена за замовчуванням, щоб функція працювала, потрібно підключити файл wp-admin/includes/upgrade.php .

Функцію потрібно запускати один раз при активації плагіна!

Хуків немає.

Повертає

true|false. Логічні: true – якщо вдалося конвертувати та false – якщо ні.

Використання

maybe_convert_table_to_utf8mb4($table);
$table
(рядок) (обов’язковий)
Назва таблиці, яку потрібно конвертувати.

Приклади

0

#1 Змінимо кодування всіх полів таблиці на utf8mb4

register_activation_hook( __FILE__, 'myplugin_activate');
function myplugin_activate() {
	$table = 'my_table';

	require ABSPATH. '/wp-admin/includes/upgrade.php';
	maybe_convert_table_to_utf8mb4($table);
}

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 4.2.0Введено.

Код maybe_convert_table_to_utf8mb4() WP 6.0.2

function maybe_convert_table_to_utf8mb4( $table ) {
	Global $wpdb;

	$results = $wpdb->get_results( "SHOW FULL COLUMNS FROM `$table`" );
	if ( ! $results ) {
		return false;
	}

	foreach ( $results as $column ) {
		if ( $column->Collation ) {
			list( $charset ) = explode( '_', $column->Collation );
			$ charset = strtolower ($ charset);
			if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) {
				// Не upgrade tables that have non-utf8 columns.
				return false;
			}
		}
	}

	$table_details = $wpdb->get_row( "SHOW TABLE STATUS LIKE '$table'" );
	if (! $table_details) {
		return false;
	}

	list( $table_charset ) = explode( '_', $table_details->Collation );
	$table_charset = strtolower($table_charset);
	if ( 'utf8mb4' === $table_charset ) {
		return true;
	}

	return $wpdb->query( "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *