Oke - saya akan memposting jawaban saya sendiri untuk siapa pun yang mendarat di sini:(saya telah melihat ini di tempat lain, tetapi tidak memercayainya saat itu karena tidak ada penjelasan).
Saat SQL Format() mengubah angka menjadi string, ia menggunakan variabel character_set_results Tab Variabel PMA menunjukkan ini sebagai "utf8" tetapi kemudian pada baris di bawahnya, tertulis (nilai sesi) =utf8mb4.
Jadi saya sadar bahwa PMA mengesampingkan default server. Masalah saya yang sebenarnya adalah saya tidak dapat menemukan cara untuk mengubah penggantian ini - baik dengan menggunakan pengaturan [mysqld] lewati-karakter-set-klien-jabat tangan.. atau dengan mengedit file php.config.inc. Hari ini saya memiliki terobosan.. Saya menetapkan bahwa jika Saya menggunakan PMA yang sama untuk terhubung ke dan server MySQL yang lebih lama, masalahnya tidak terjadi. Ini menunjukkan bahwa PMA memaksa utf8mb4 pada server yang lebih baru (mampu), tetapi bukan yang lebih lama. Saya melakukan pencarian teks phpmyadmin untuk string 'mb4' dan menemukan kode berikut di kelas:phpMyAdmin/libraries/DatabaseInterface.class.php
// Skip charsets for Drizzle
if (!PMA_DRIZZLE) {
if (PMA_MYSQL_INT_VERSION > 50503) {
$default_charset = 'utf8mb4';
$default_collation = 'utf8mb4_general_ci';
} else {
$default_charset = 'utf8';
$default_collation = 'utf8_general_ci';
}
PMA_MYSQL_INT_VERSION> 50503 sepertinya cocok dengan teori saya tentang versi mysql yang lebih lama, jadi saya telah mencadangkan file dan mengedit kelas menggantikan utf8mb4 dengan utf8 dalam fungsi ini.phpMyAdmin sekarang menampilkan apa yang saya inginkan di tab variabelnya, dan fungsi Format() sekarang mengembalikan apa yang saya harapkan.