Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHPMyAdmin erzwingt die Verwendung von ut8mb4 als Standardsortierung

Ok - ich werde meine eigene Antwort für alle anderen posten, die hier landen:(ich hatte das woanders gesehen, aber damals nicht getraut, weil es keine Erklärung gab).

Wenn das SQL-Format() eine Zahl in einen String umwandelt, verwendet es die Variable character_set_results Die Registerkarte "Variablen" von .PMA zeigte dies als "utf8" an, aber dann hieß es in einer Zeile darunter (Sitzungswert) =utf8mb4.
Also war mir bewusst, dass PMA den Serverstandard überschrieb. Mein eigentliches Problem war, dass ich konnte keine Möglichkeit finden, diese Überschreibung zu ändern - entweder durch Verwenden der Einstellung [mysqld] skip-character-set-client-handshake ... oder durch Bearbeiten der Datei php.config.inc. Heute hatte ich einen Durchbruch ... Ich habe festgestellt, dass if Ich habe denselben PMA verwendet, um eine Verbindung zu einem älteren MySQL-Server herzustellen, das Problem ist nicht aufgetreten. Dies deutet darauf hin, dass PMA utf8mb4 auf neueren (fähigen) Servern erzwingt, aber nicht auf älteren. Ich habe eine Textsuche von phpmyadmin nach der Zeichenfolge durchgeführt 'mb4' und fand den folgenden Code in der Klasse: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';
        }

die PMA_MYSQL_INT_VERSION> 50503 scheint zu meiner Theorie über ältere MySQL-Versionen zu passen, also habe ich die Datei gesichert und die Klasse bearbeitet, die utf8mb4 ersetzt mit utf8 In dieser Funktion zeigt phpMyAdmin jetzt, was ich will, in seinem Variablen-Tab, und die Format()-Funktion gibt jetzt zurück, was ich erwarte.