sql >> Base de Datos >  >> RDS >> Mysql

PHPMyAdmin obliga a usar ut8mb4 como intercalación predeterminada

Ok, voy a publicar mi propia respuesta para cualquier otra persona que aterrice aquí:(había visto esto en otro lugar, pero no confiaba en él en ese momento porque no había explicación).

Cuando SQL Format() convierte un número en una cadena, utiliza la variable character_set_results La pestaña Variables de .PMA mostraba esto como "utf8", pero luego, en una línea debajo, decía (valor de sesión) =utf8mb4.
Entonces sabía que PMA estaba anulando el valor predeterminado del servidor. Mi problema real era que No pude encontrar ninguna forma de cambiar esta anulación, ya sea usando la configuración [mysqld] skip-character-set-client-handshake... o editando el archivo php.config.inc. Hoy tuve un gran avance... Establecí que si Usé el mismo PMA para conectarme a un servidor MySQL anterior, el problema no ocurrió. Esto sugirió que PMA estaba forzando utf8mb4 en servidores más nuevos (capaces), pero no en los más antiguos. Hice una búsqueda de texto de phpmyadmin para la cadena 'mb4' y encontré el siguiente código en la clase: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';
        }

la PMA_MYSQL_INT_VERSION> 50503 parece encajar con mi teoría sobre las versiones anteriores de mysql, así que hice una copia de seguridad del archivo y edité la clase reemplazando utf8mb4 con utf8 en esta función. phpMyAdmin ahora muestra lo que quiero en su pestaña de variables, y la función Format() ahora devuelve lo que espero.