it-swarm.com.de

So entfernen Sie den STRICT-SQL-Modus in MySQL

Dies ist eine Antwort auf diese Frage falsches DATETIME-Format in MYSQL

Wie kann man STRICT_TRANS_TABLES ein für alle Mal loswerden?

mysql --help meldet die folgenden Konfigurationen:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

$ ls  /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
ls: /Users/pain/.my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: /usr/local/etc/my.cnf: No such file or directory
/etc/my.cnf

$ cat /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

Das hilft aber nicht. Ich habe älteren Code und jedes Mal, wenn ich den Computer neu starte, muss ich mysql starten und sql_mode ändern.

Update

Also gab ich das von MySQL installierte Homebrew auf und lud es von mysql.com herunter. Das hat aber auch nicht geholfen. Folgen Sie den Antworten hier: Wie kann ich die unbekannte Variable 'sql-mode = ANSI' 'reparieren? Ich habe verschiedene Varianten von /etc/my.cnf ausprobiert: [mysql], [mysqld], sql_mode, sql-mode - nichts hat geholfen.

24
firedev

Am Ende entfernte ich den MySQL-Server, den ich von mysql.com bekam, neu über Homebrew und musste ihn bearbeiten

/usr/local/Cellar/mysql/5.6.xx/my.cnf

Wo ich den verdammten STRICT_TRANS_TABLES auskommentieren konnte.

Dies erklärt jedoch nicht, warum die Standardkonfiguration die von /etc/my.cnf überschreibt, aber ich habe schon zu viel Zeit damit verbracht. Übrigens bin ich immer noch nicht sicher, was ich mit der von mysql.com bereitgestellten Distribution machen soll. 

14
firedev

Dieses Problem hat mich auch für eine Weile erschüttert. Keine der Antworten hat sich bisher auf das ursprüngliche Problem bezogen, aber ich glaube, meine tut es, also werde ich es posten, falls es anderen hilft.

Ich habe MySQL (von mysql.com) Community Edition 5.7.10 unter OS X 10.10.3 installiert 

Am Ende habe ich einen /etc/mysql/my.cnf mit folgendem Inhalt erstellt: -

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION

Nach dem Neustart des Servers hat mir ein SHOW VARIABLES LIKE 'sql_mode'; gegeben: -

+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

Endlich kein strenger Modus!

40
Paul Warren

In Centos 6.5 musste ich /usr/my.cnf Bearbeiten und festlegen (obwohl /etc/my.cnf vorhanden war und Bindings dort erfolgreich gesetzt wurden

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

paket war von:

mysql-community-client.x86_64      5.6.16-1.el6            @mysql56-community
9
vd1008

Laut MySQL Strict Mode unter OS X ist die problematische Einstellung tatsächlich auf /usr/local/mysql/my.cnf und kann auskommentiert werden, um dieses Verhalten zu beenden. 

6
ssnobody

Jetzt kann der sql_mode nicht auf leere Zeichenfolge gesetzt werden. Die eigentliche Abfrage lautet:

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 5.7.16

3

Ich habe jede Antwort versucht, die ich zu MySQL 5.7 unter Mac OS 10.12 finden konnte. Schließlich wurde der strikte Modus deaktiviert, nicht aufgrund der Position von my.cnf, die sich vermutlich an einem der von MySQL angegebenen Orte befinden kann Dank eines UNIX-Berechtigungsproblems.

Ich habe zunächst MySQL Workbench 6.2.3.12313 verwendet, um my.cnf zu erstellen. Dies führte zu zwei möglichen Problemen: Erstens wurde die Option auf "sql-mode" anstelle von "sql_mode" gesetzt und die Datei (in/etc) nur für root lesbar und schreibbar. MySQL wird nicht als Root ausgeführt, wenn Sie es auf die Art und Weise installieren, die ich aus dem Binärpaket auf der MySQL-Website installiert habe. Es wird als _mysql ausgeführt. Der _mysql-Benutzer muss /etc/my.cnf oder wo auch immer Sie es ablegen müssen, lesen können. Damit dies funktioniert, müssen Sie Folgendes ausführen:

Sudo chmod o+r /etc/my.cnf

aus gutem Grund möchten Sie vielleicht auch ausführen:

Sudo chmod g+r /etc/my.cnf

Stellen Sie dann sicher, dass Sie MySQL neu starten. (Ich habe festgestellt, dass dies am besten über das Systemeinstellungen-MySQL-Bedienfeld unter Mac OS funktioniert; die Verwendung der Befehlszeile ist etwas chaotisch und die Funktionalität von MySQL Workbench funktioniert einfach nicht.) Solange Sie in my.cnf eine Einstellung für sql_mode haben beinhaltet nicht den strikten Modus, der strikte Modus sollte ausgeschaltet sein.

2
thinkcomp

Unter Mac OS X El Capitan habe ich eine Datei .my.cnf im Home-Verzeichnis des Benutzers erstellt, die Einstellungen für mysql unter [mysqld] festgelegt und dann mysql neu gestartet. Funktionierte gut!

0
Kjell

Sie müssen sowohl nach sql-mode als auch nach sql_mode suchen, falls eine Einstellung vorhanden ist. http://it.i88.ca/2014/03/how-to-get-rid-of-strict-sql-mode-in.html

0
i88.ca