sql >> Database >  >> RDS >> Mysql

PHPMyAdmin dwingt ut8mb4 als standaardsortering te gebruiken

Ok - ik ga mijn eigen antwoord posten voor iedereen die hier belandt:(ik had dit ergens anders gezien, maar vertrouwde het destijds niet omdat er geen verklaring was).

Wanneer de SQL Format() een getal in een tekenreeks verandert, gebruikt het de variabele character_set_results .PMA's tabblad Variabelen liet dit zien als "utf8", maar op een regel eronder zei het (sessiewaarde) =utf8mb4.
Dus ik was me ervan bewust dat PMA de standaardinstelling van de server negeerde. Mijn echte probleem was dat ik kon geen manier vinden om deze override te veranderen - ofwel door de [mysqld] skip-character-set-client-handshake instelling te gebruiken... of door het bestand php.config.inc te bewerken. Vandaag had ik een doorbraak. Ik stelde vast dat als Ik gebruikte dezelfde PMA om verbinding te maken met een oudere MySQL-server, het probleem deed zich niet voor. Dit suggereerde dat PMA utf8mb4 forceerde op nieuwere (compatibele) servers, maar niet op oudere. Ik deed een tekstzoekopdracht van phpmyadmin voor de string 'mb4' en vond de volgende code in de klas: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';
        }

de PMA_MYSQL_INT_VERSION> 50503 lijkt te passen bij mijn theorie over oudere mysql-versies, dus ik heb een back-up van het bestand gemaakt en de klasse aangepast ter vervanging van utf8mb4 met utf8 in deze functie.phpMyAdmin laat nu zien wat ik wil op het tabblad variabelen, en de functie Format() geeft nu terug wat ik verwacht.



  1. MySQL stoppen/starten met MySQL Workbench

  2. Datum volgende gebeurtenis weergeven

  3. Hoe de laatste dag van vorige week in sql te krijgen?

  4. Array in SQL-query?