Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHPMyAdmin oblige à utiliser ut8mb4 comme classement par défaut

Ok - je vais poster ma propre réponse pour tous ceux qui atterrissent ici :(j'avais vu ça ailleurs, mais je n'y avais pas confiance à l'époque car il n'y avait aucune explication).

Lorsque SQL Format() transforme un nombre en chaîne, il utilise la variable character_set_results L'onglet Variables de .PMA montrait cela comme "utf8" mais ensuite sur une ligne ci-dessous, il disait (valeur de session) =utf8mb4. n'a trouvé aucun moyen de modifier ce remplacement - soit en utilisant le paramètre [mysqld] skip-character-set-client-handshake .. ou en éditant le fichier php.config.inc.Aujourd'hui, j'ai eu une percée .. J'ai établi que si J'ai utilisé le même PMA pour me connecter à un ancien serveur MySQL, le problème ne s'est pas produit. Cela suggérait que PMA forçait utf8mb4 sur des serveurs plus récents (capables), mais pas sur les plus anciens. J'ai fait une recherche textuelle de phpmyadmin pour la chaîne 'mb4' et a trouvé le code suivant dans la 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';
        }

le PMA_MYSQL_INT_VERSION> 50503 semble correspondre à ma théorie sur les anciennes versions de mysql, j'ai donc sauvegardé le fichier et modifié la classe en remplaçant utf8mb4 avec utf8 dans cette fonction.phpMyAdmin affiche maintenant ce que je veux dans son onglet de variables, et la fonction Format() renvoie maintenant ce que j'attends.