sql >> Databasteknik >  >> RDS >> Mysql

PHPMyAdmin tvingar använda ut8mb4 som standardsortering

Ok - jag ska posta mitt eget svar för alla andra som landar här:(jag hade sett det här någon annanstans, men litade inte på det då eftersom det inte fanns någon förklaring).

När SQL Format() förvandlar ett tal till en sträng, använder det variabeln character_set_results .PMA:s Variabler-flik visade detta som "utf8" men på en rad nedan stod det (sessionsvärde) =utf8mb4.
Så jag var medveten om att PMA åsidosatte serverns standard. Mitt verkliga problem var att jag kunde inte hitta något sätt att ändra denna åsidosättning - antingen genom att använda [mysqld] skip-character-set-client-handshake-inställningen... eller genom att redigera filen php.config.inc.Idag fick jag ett genombrott.. Jag konstaterade att om Jag använde samma PMA för att ansluta till en äldre MySQL-server, problemet uppstod inte. Detta antydde att PMA tvingade utf8mb4 på nyare (kapabla) servrar, men inte äldre. Jag gjorde en textsökning av phpmyadmin efter strängen 'mb4' och hittade följande kod i klassen: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 verkar passa med min teori om äldre mysql-versioner, så jag har säkerhetskopierat filen och redigerat klassen och ersatt utf8mb4 med utf8 i den här funktionen.phpMyAdmin visar nu vad jag vill ha på fliken Variabler, och Format()-funktionen returnerar nu vad jag förväntar mig.



  1. Hur visar man tabellinnehåll i Mysql Workbench GUI?

  2. MySQL-relationer

  3. PHP PDO Förberedd sats bind NULL-värde

  4. Arrayvariabel i mysql