ONLY_FULL_GROUP_BY uitschakelen

Ik heb per ongeluk de modus ONLY_FULL_GROUP_BY als volgt ingeschakeld:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

Hoe schakel ik het uit?


Antwoord 1, autoriteit 100%

Oplossing 1:
Verwijder ONLY_FULL_GROUP_BYvan de mysql-console

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

u kunt hier

Oplossing 2:Verwijder ONLY_FULL_GROUP_BYuit phpmyadmin

  • Open phpmyadmin & selecteer localhost
  • Klik op menu Variabelen & scroll naar beneden voor sql-modus
  • Klik op de knop Bewerken om de waarden te wijzigen & verwijder ONLY_FULL_GROUP_BY& klik op opslaan.

Antwoord 2, autoriteit 29%

Bijwerken:

Om je huidige mysql-instellingen te behouden en ONLY_FULL_GROUP_BYuit te schakelen, raad ik aan om je phpmyadmin te bezoeken of welke client je ook gebruikt en typ:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

kopieer het resultaat vervolgens naar uw my.ini-bestand.

mint: sudo nano /etc/mysql/my.cnf

ubuntu 16 en hoger: sudo nano /etc/mysql/my.cnf

ubuntu 14-16: /etc/mysql/mysql.conf.d/mysqld.cnf

Let op! Het resultaat copy_mekan een lange tekst bevatten die standaard kan worden bijgesneden. Zorg ervoor dat je de hele tekst kopieert!


oud antwoord:

Als u permanentwilt uitschakelen fout “Expressie #N van de SELECT-lijst staat niet in de GROUP BY-clausule en bevat niet-geaggregeerde kolom ‘db.table.COL’ die niet functioneel afhankelijk is van kolommen in de GROUP BY-clausule; dit is niet compatibel met sql_mode=only_full_group_by” voer deze stappen uit:

  1. sudo nano /etc/mysql/my.cnf
  2. Voeg dit toe aan het einde van het bestand

    [mysqld]  
    sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  3. sudo service mysql restartom MySQL opnieuw op te starten

Hiermee wordt ONLY_FULL_GROUP_BYuitgeschakeld voor ALLEgebruikers


Antwoord 3, autoriteit 16%

Wees voorzichtig met

SET sql_mode = '' 

Hiermee worden alle momenteel ingeschakelde modi gewist.Als je niet met andere instellingen wilt knoeien, moet je een

SELECT @@sql_mode 

eerst, om een door komma’s gescheiden lijst van de ingeschakelde modi te krijgen, STEL deze dan in op deze lijst zonder de optie ONLY_FULL_GROUP_BY.


Antwoord 4, autoriteit 8%

   mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> exit;

5, Autoriteit 8%

Geef dit eens:

SET sql_mode = ''

Community Opmerking: Zoals opgemerkt in de onderstaande antwoorden, wist dit eigenlijk alle de SQL-modus die momenteel is ingeschakeld. Dat is misschien niet noodzakelijkerwijs wat je wilt.


6, Autoriteit 7%

Voeg slechts één modus toe aan SQL_MODE zonder bestaande exemplaren te verwijderen:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

Alleen een specifieke modus van SQL_MODE verwijderen zonder anderen te verwijderen:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

In uw geval, als u alleen ONLY_FULL_GROUP_BY-modus wilt verwijderen, gebruikt u onderstaande opdracht:

SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

Referentie: http://johnemb.blogspot.com/2014 /09/adding-or-removing-individual-sql-modes.html


7, Autoriteit 4%

Dankzij @cwhisperer.
Ik had hetzelfde probleem met Doctrine in een Symfony-app. Ik heb net de optie toegevoegd aan mijn config.yml:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

Dit werkte prima voor mij.


Antwoord 8, autoriteit 3%

Aan:

  • Ubuntu 14.04
  • mysql Ver 14.14 Distrib 5.7.16, voor Linux (x86_64) met EditLine-wrapper

Doe:

$ sudo nano /etc/mysql/conf.d/mysql.cnf

Kopieer en plak:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Naar de onderkant van het bestand

$ sudo service mysql restart

Antwoord 9, autoriteit 2%

De MySQL-documentatiespecificeert ook de volgende methoden:

  • Stel sql-mode="<modes>"in in een optiebestand zoals my.cnf (Unix-besturingssystemen) of my.ini (Windows).
  • Gebruik de optie --sql-mode="<modes>"om de SQL-modus bij het opstarten van de server in te stellen via de opdrachtregel.

*Waar <modes>een lijst is met verschillende modi, gescheiden door komma’s.

Als u de SQL-modus expliciet wilt wissen, stelt u deze in op een lege tekenreeks met --sql-mode=""op de opdrachtregel, of sql-mode=""in een optiebestand.

Ik heb de optie sql-mode=""toegevoegd aan /etc/my.cnfen het werkte.

Deze SO-oplossingbespreekt manieren om erachter te komen welk my.cnf-bestand door MySQL wordt gebruikt.

Vergeet niet MySQL opnieuw te starten nadat u wijzigingen heeft aangebracht.


Antwoord 10

Als u WAMP gebruikt.
Klik met de linkermuisknop op het WAMP-pictogram en ga vervolgens naar MySQL -> MySQL-instellingen -> sql-modus
en selecteer vervolgens sql-mode->gebruikersmodus


Antwoord 11

Modiën toevoegen aan of verwijderen uit sql_mode

MySQL 5.7.9 of hoger

Als u een modus wilt toevoegen aan of verwijderen uit sql_mode, kunt u list_adden list_dropfuncties.

Als u een modus wilt verwijderen uit de huidige SESSION.sql_mode, kunt u een van de volgende opties gebruiken:

SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');

Om een modus uit de GLOBAL.sql_modete verwijderen die blijft bestaan gedurende de huidige runtime-bewerking, totdat de service herstart.

SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');

MySQL 5.7.8 of eerder

Aangezien de waarde sql_modeeen CSV-reeks van modi is, moet u ervoor zorgen dat de tekenreeks geen resterende komma’s bevat, wat kan worden bereikt door TRIM(BOTH ',' FROM ...).

Als u een modus uit de variabele sql_modewilt verwijderen, gebruikt u REPLACE()samen met TRIM()om ervoor te zorgen dat eventuele resterende komma’s worden verwijderd.

SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));

Als u een modus wilt toevoegen aan de variabele sql_mode, gebruikt u CONCAT_WS(',', ...), om ervoor te zorgen dat een komma wordt toegevoegd aan de huidige modi en TRIM()om ervoor te zorgen dat eventuele resterende komma’s worden verwijderd.

SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));

OPMERKING: het wijzigen van de variabele GLOBALwordt nietdoorgegeven aan de variabele SESSIONtotdat er een nieuwe verbinding tot stand is gebracht.

De variabele GLOBALblijft bestaan totdat de actieve service opnieuw wordt gestart.

De SESSIONVariabele zal blijven bestaan ​​voor de huidige verbinding, totdat de verbinding gesloten is en er een nieuwe verbinding tot stand is gebracht.


Terug naar GLOBAL.sql_mode

Sinds SET sql_mode = 'ONLY_FULL_GROUP_BY';is uitgevoerd zonder de GLOBALModifier, heeft de wijziging alleen de huidige SESSIONStaatwaarde beïnvloed, die ook betrekking op @@sql_mode. Om het te verwijderen en terug te keren naar de Global Standaard op Server Restart -waarde, wilt u de waarde van @@GLOBAL.sql_modegebruiken. [SIC]

De huidige SESSIONWaarde is alleen geldig voor de huidige verbinding.
Reconnemen aan de server zal de waarde terugkeren naar de GLOBAL
waarde.

Om de huidige sessiestatuswaarde terug te keren naar de huidige wereldwijde waarde, kunt u een van de volgende handelen gebruiken:

SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;

Wijzig SESSION.sql_modeWAARDE VOOR ONLY_FULL_GROUP_BY

SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode         | @@GLOBAL.sql_mode                            |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+

Zet de waarde SESSION.sql_modeterug naar de waarde GLOBAL.sql_mode

SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode                                   | @@GLOBAL.sql_mode                            |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+

Server Herstart Persistent sql_modemet behulp van het optiebestand

De SQL-modus
gebruik bij het opstarten van de server de optie --sql-mode="modes"op de opdracht
regel, of sql-mode="modes"in een optiebestand zoals my.cnf (Unix
besturingssystemen) of my.ini (Windows). [sic]

Raadpleeg uw versie van MySQL om de ondersteunde en standaard modi.

MySQL >= 5.7.5, <= 5.7.6 standaard

[mysqld]
sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

Zie de syntaxis voor optiebestanden voor meer informatie.

De syntaxis voor het specificeren van opties in een optiebestand is vergelijkbaar met
opdrachtregelsyntaxis. In een optiebestand laat u echter de voorloop
twee streepjes van de optienaam en u specificeert slechts één optie per
lijn. Bijvoorbeeld --quicken --host=localhostop de opdrachtregel
moet worden opgegeven als quicken host=localhostop aparte regels in
een optiebestand. Om een optie van de vorm --loose-opt_nameop te geven in
een optiebestand, schrijf het als loose-opt_name.

De waarde kan optioneel tussen enkele aanhalingstekens worden geplaatst of
dubbele aanhalingstekens, wat handig is als de waarde een #. bevat
commentaarkarakter.

Standaard sql_modewaarden

Sinds de MySQL-documentatie per versie-waarden zijn verwijderd, heb ik ze hier ter referentie toegevoegd.

MySQL >= 8.0.11 8.0.5 – 8.0.10 Overgeslagen

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION

MySQL >= 5.7.8, <= 8.0.4

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

MySQL 5.7.7

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

MySQL >= 5.7.5, <= 5.7.6

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION

MySQL >= 5.6.6, <= 5.7.4

NO_ENGINE_SUBSTITUTION

MySQL <= 5.6.5

''

Antwoord 12

Bewerk op MySQL 5.7 en Ubuntu 16.04 het bestand mysql.cnf.

$ sudo nano /etc/mysql/conf.d/mysql.cnf

Voeg de sql_mode toe zoals hieronder en sla het bestand op.

[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Houd er rekening mee dat ik in mijn geval de modus STRICT_TRANS_TABLES en de ONLY_FULL_GROUP_BY heb verwijderd.

Als u dit doet, wordt de modusconfiguratie permanent opgeslagen. Anders is het als u de @@sql_mode via MySQL bijwerkt, omdat deze wordt gereset bij het opnieuw opstarten van de machine/service.

Daarna, om de gewijzigde configuratie in actie te brengen, start u de mysql-service opnieuw:

$ sudo service mysql restart

Probeer toegang te krijgen tot de mysql:

$ mysql -u user_name -p

Als je in staat bent om in te loggen en toegang te krijgen tot de MySQL-console, is dat in orde. Geweldig!

MAAR, als u net als ik de fout “unknown variable sql_mode”tegenkomt, wat aangeeft dat sql_modeeen optie is voor mysqld, moet u teruggaan, het bestand mysql.cnf opnieuw bewerken en de [mysql]wijzigen in [mysqld]. Start de MySQL-service opnieuw en voer een laatste test uit om in te loggen op de MySQL-console. Hier is het!


Antwoord 13

Dit is wat ik heb gedaan om het op de Mysql-werkbank te repareren:

Voordat ik de huidige waarde kreeg met het onderstaande commando

SELECT @@sql_mode 

later heb ik de sleutel ONLY_FULL_GROUP_BY uit de lijst verwijderd en heb ik de onderstaande opdracht geplakt

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

Antwoord 14

Op mijn sql (versie 5.7.11 draait op Mac OS X) werkt dit voor mij op mysql shell-client:

SET
@@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Volgens de MySQL 5.6-documentatie is sql_mode standaard

lege string in MySQL 5.6.5 en terug
NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES in 5.6.6 +

mysql 5.6 referentie


Antwoord 15

Voor Mac OS Mojave (10.14) Terminal openen

$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf

Plak het volgende:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Sneltoetsen om op te slaan & Nano afsluiten: Ctrl+xen yen Enter

Opmerking:Mogelijk moet u mysql-5.7.24-macos10.14-x86_64bijwerken in deze opdrachten, vink gewoon de juiste mapnaam die je hebt gekregen in /usr/local/

Ik hoop dat het iemand zal helpen!


Antwoord 16

Als je MySQL 8.0.11 dus gebruikt, moet je de ‘NO_AUTO_CREATE_USER’ uit de sql-modus verwijderen.

Voeg de volgende regel toe aan bestand /etc/mysql/my.cnfen [mysqld] header

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Antwoord 17

Ik gebruik doctrine en ik heb de driverOptions toegevoegd in mijn doctrine.local.php :

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'host' => 'localhost',
                'port' => '3306',
                'user' => 'myusr',
                'password' => 'mypwd',
                'dbname' => 'mydb',
                'driverOptions' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
                ),
            ),
        ),
    ),
));

In PHPMYADMIN heeft de gebruiker super geactiveerd in de privileges.


18

Ik werk met MySQL en geregistreerd met rootgebruiker, de oplossing die voor mij werkt, is het volgende:

MySQL & GT; Set Session SQL_MODE = (selecteer
Vervang (@@ sql_mode, ‘only_full_group_by’, ”));


Antwoord 19

  1. Controleer de standaardwaarde van sql_mode:

    SELECT @@sql_mode;

  2. Verwijder ONLY_FULL_GROUP_BY van de console door onderstaande query uit te voeren:

STEL GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));

  1. Verwijder het ook uit uw specifieke database

gebruik database_name;

SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));

  1. Start uw web-app-server opnieuw

  2. Ga naar de pagina die dit probleem veroorzaakte. Het zou nu werken.

OF

  1. Voeg het volgende toe aan uw my.cnf-bestand

    sql_mode=”TRADITIONEEL”

Opmerking:als u mac gebruikt, is my.cnf mogelijk hier /usr/local/etc/my.cnf

beschikbaar

Of probeer deze link https://dev.mysql. com/doc/refman/8.0/en/option-files.html

  1. Herstart MySQL-server

    sudo /usr/local/bin/mysql.server opnieuw opstarten

    OF

    brew-services herstart mysql


Antwoord 20

Dit is een permanente oplossing voor MySql 5.7+ op Ubuntu 14+:

$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

Als je in staat bent om zonder fouten in te loggen, zou je nu helemaal klaar moeten zijn.


Antwoord 21

Vanaf MySQL 5.7.x bevat de standaard sql-modus ONLY_FULL_GROUP_BY. (Vóór 5.7.5 detecteert MySQL geen functionele afhankelijkheid en is ONLY_FULL_GROUP_BY standaard niet ingeschakeld).

ONLY_FULL_GROUP_BY: niet-deterministische groeperingsquery’s worden afgewezen

Raadpleeg voor meer informatie de documentatie van sql_mode

U kunt een van de onderstaande methoden volgen om de sql_mode

. te wijzigen

Methode 1:

Controleer de standaardwaarde van sql_mode:

SELECT @@sql_mode 

Verwijder ONLY_FULL_GROUP_BYvan de console door onderstaande query uit te voeren:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Methode 2:

Toegang tot phpmyadmin voor het bewerken van uw sql_mode

  • Log in op phpmyadmin en open localhost
  • Bovenaan bij Variabelenbovenaan in menu-items en zoek naar sql-modus
  • Klik op de knop Bewerken om ONLY_FULL_GROUP_BYte verwijderen en op te slaan

Antwoord 22

Voor MySql 8 kun je deze proberen. (niet getest op 5.7. Hoop dat het daar ook werkt)

Open eerst dit bestand

sudo vi /etc/mysql/my.cnf
en plak onderstaande code aan het einde van bovenstaand bestand

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

Herstart mysql vervolgens door deze sudo service mysql restart

uit te voeren


Antwoord 23

Dit werkte voor mij:

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Antwoord 24

Je kunt het uitschakelen met behulp van het configuratiebestand my.cnf:

$ mysql --verbose --help | grep my.cnf

Dus in macOS 10.12 staat het op usr/local/etc/my.cnf. U kunt sql_modehier bewerken:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Antwoord 25

Hier is mijn oplossing om de Mysql-configuratie te wijzigen via het phpmyadmin-dashboard:

Om op te lossen “dit is incompatibel met sql_mode=only_full_group_by”:
Open phpmyadmin en ga naar de startpagina en selecteer het submenu ‘Variabelen’. Scroll naar beneden om de sql-modus te vinden. Bewerk sql-modus en verwijder ‘ONLY_FULL_GROUP_BY’ Sla het op.


Antwoord 26

Het beste is om te proberen ONLY_FULL_GROUP_BY te gebruiken voor nieuwe projecten terwijl je achterwaarts compatibel blijft met bestaande sites en databases. Hiervoor heb ik gekozen voor een wijziging van de SQL-modus bij het laden van mysqli, respectievelijk PDO in mijn lessen.

Voor mysqli:

mysqli_query($this->link,"SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");

Voor PDO-klasse:

PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

Voorbeeld met PDO init :

try {
    $dns     = 'mysql:host=localhost;dbname=' . $prod_db;
    $user    = _DBUSER_;
    $pass    = _DBPASS_;
    $options = array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
    );
    $db = new PDO($dns, $user, $pass, $options);
} 
catch(Exception $e) {
    mail("[email protected]","Database Error ",$dns.",".$user);
    echo "Unable ot connect to mySQL : ", $e->getMessage();
    die();
} 

De nieuwe klassen die op dezelfde server zijn gemaakt, werken dus met de nieuwe databasestandaard.


Antwoord 27

Als iemand die Drupal 8 gebruikt dit probleem met mysql 8 tegenkomt, heb ik dat opgelost door de standaardconfiguratie te overschrijven door dit stukje code toe te voegen.

Bron: https://www.drupal.org/project/drupal/issues /2856270


Antwoord 28

OnLY_FULL_GROUP_BY uitschakelen met behulp van de volgende query.

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

En om ONLY_FULL_GROUP_BY in te schakelen, gebruik de volgende query.

SET sql_mode = 'ONLY_FULL_GROUP_BY';

Other episodes