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_BY
uit 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_me
kan 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:
sudo nano /etc/mysql/my.cnf
-
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"
-
sudo service mysql restart
om MySQL opnieuw op te starten
Hiermee wordt ONLY_FULL_GROUP_BY
uitgeschakeld 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.cnf
en 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_add
en list_drop
functies.
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_mode
te 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_mode
een 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_mode
wilt 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
GLOBAL
wordt nietdoorgegeven aan de variabeleSESSION
totdat er een nieuwe verbinding tot stand is gebracht.De variabele
GLOBAL
blijft bestaan totdat de actieve service opnieuw wordt gestart.De
SESSION
Variabele 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 GLOBAL
Modifier, heeft de wijziging alleen de huidige SESSION
Staatwaarde 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_mode
gebruiken. [SIC]
De huidige
SESSION
Waarde is alleen geldig voor de huidige verbinding.
Reconnemen aan de server zal de waarde terugkeren naar deGLOBAL
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_mode
WAARDE 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_mode
terug 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_mode
met behulp van het optiebestand
De SQL-modus
gebruik bij het opstarten van de server de optie--sql-mode="modes"
op de opdracht
regel, ofsql-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--quick
en--host=localhost
op de opdrachtregel
moet worden opgegeven alsquick
enhost=localhost
op aparte regels in
een optiebestand. Om een optie van de vorm--loose-opt_name
op te geven in
een optiebestand, schrijf het alsloose-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_mode
waarden
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 +
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+x
en y
en Enter
Opmerking:Mogelijk moet u mysql-5.7.24-macos10.14-x86_64
bijwerken 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.cnf
en [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
-
Controleer de standaardwaarde van sql_mode:
SELECT @@sql_mode;
-
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’,”));
- Verwijder het ook uit uw specifieke database
gebruik database_name;
SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
-
Start uw web-app-server opnieuw
-
Ga naar de pagina die dit probleem veroorzaakte. Het zou nu werken.
OF
-
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
-
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_BY
van 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_BY
te 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_mode
hier 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';