Mysql
 sql >> Database >  >> RDS >> Mysql

PHPMyAdmin obbliga a utilizzare ut8mb4 come confronto predefinito

Ok, pubblicherò la mia risposta per chiunque altro atterri qui:(l'avevo visto da qualche altra parte, ma all'epoca non mi fidavo perché non c'era spiegazione).

Quando SQL Format() trasforma un numero in una stringa, utilizza la variabile character_set_results La scheda Variabili di .PMA lo mostrava come "utf8", ma poi su una riga sottostante diceva (valore della sessione) =utf8mb4.
Quindi ero consapevole che PMA stava sovrascrivendo l'impostazione predefinita del server. Il mio vero problema era che io non è stato possibile trovare alcun modo per modificare questo override, sia utilizzando l'impostazione skip-character-set-client-handshake di [mysqld] .. o modificando il file php.config.inc. Oggi ho avuto una svolta .. l'ho stabilito se Ho usato lo stesso PMA per connettermi a un server MySQL più vecchio, il problema non si è verificato. Ciò ha suggerito che PMA stava forzando utf8mb4 su server più recenti (capaci), ma non su quelli più vecchi. Ho eseguito una ricerca di testo su phpmyadmin per la stringa 'mb4' e ho trovato il seguente codice nella classe: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';
        }

il PMA_MYSQL_INT_VERSION> 50503 sembra adattarsi alla mia teoria sulle versioni precedenti di MySQL, quindi ho eseguito il backup del file e modificato la classe sostituendo utf8mb4 con utf8 in questa funzione.phpMyAdmin ora mostra ciò che voglio nella sua scheda delle variabili e la funzione Format() ora restituisce ciò che mi aspetto.