Ok - zamierzam opublikować własną odpowiedź dla każdego, kto tu wyląduje:(widziałem to gdzie indziej, ale wtedy nie ufałem, ponieważ nie było wyjaśnienia).
Kiedy SQL Format() zamienia liczbę w ciąg, używa zmiennej character_set_results Zakładka Zmienne .PMA pokazywała to jako „utf8”, ale w wierszu poniżej było napisane (wartość sesji) =utf8mb4.
Więc wiedziałem, że PMA nadpisuje domyślną wartość serwera. Moim prawdziwym problemem było to, że nie mogłem znaleźć sposobu, aby zmienić to nadpisanie - albo za pomocą ustawienia [mysqld] skip-character-set-client-handshake.. albo edytując plik php.config.inc. Dzisiaj miałem przełom.. Ustaliłem, że jeśli Użyłem tego samego PMA do połączenia ze starszym serwerem MySQL, problem nie wystąpił. Sugerowało to, że PMA wymuszał utf8mb4 na nowszych (zdolnych) serwerach, ale nie starszych. Przeszukałem tekst w phpmyadmin dla ciągu 'mb4' i znalazł następujący kod w klasie: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 wydaje się być zgodny z moją teorią dotyczącą starszych wersji mysql, więc utworzyłem kopię zapasową pliku i wyedytowałem klasę, zastępując utf8mb4 z utf8 w tej funkcji.phpMyAdmin pokazuje teraz to, czego chcę w swojej zakładce zmiennych, a funkcja Format() zwraca teraz to, czego oczekuję.