2010-11-30 6 views
3

Ich habe eine alte Anwendung, die nach einem Upgrade von MySQL 5.0 auf 5.1 fehlgeschlagen ist.Wie erzwinge MySQL den TRADITIONAL-Modus?

Ein wenig Forschung ergab, dass dies auf den "strikten Modus" zurückzuführen ist, der das Einfügen bestimmter Arten von "ungültigen" Werten verhindert, die zuvor nur automatisch in etwas Vernünftiges umgewandelt wurden.

Ich versuchte SET @@SESSION.sql_mode = '' und SET @@GLOBAL.sql_mode = '', aber ich bekomme immer noch den Fehler.

Auch versucht, sql_mode in der my.ini auskommentieren.

Gibt es eine stärkere, "nukleare" Option, um das zu beheben?

+3

Diese * vernünftigen * Ersetzungen enthalten Datumsangaben als '0000-00-00', Fremdschlüssel wie '0', leere Strings in ENUM-Feldern ... Meiner Erfahrung nach neigt das dazu, alles zu verkomplizieren, wie 'WHERE start_date IS NULL funktioniert nicht wie erwartet und Sie müssen zu 'WHERE Startdatum NULL ODER Startdatum = '0000-00-00' wechseln. Sie sollten Ihre Produktionsumgebung mit dem entsprechenden SQL-Modus patchen, aber auch strikte Modi in Ihrer Entwicklungsumgebung erzwingen und versuchen, die Anwendung zu reparieren. –

Antwort

5

In meiner Anwendung, die ich in der Regel sicher, dass die MySQL-Verbindung von traditionellen Modus wird mit

SET SESSION sql_mode = 'ANSI_QUOTES,TRADITIONAL' 

auf jeder neuen Verbindung ausgibt. Ich nehme an, dass Sie das Problem gelöst haben, wenn Sie nur

auf jeder neuen Verbindung ausgeben.

Sie sollten in der Lage sein, den Standard-SQL-Modus für neue Verbindungen von

Ausgabe zu ändern
SET GLOBAL sql_mode = '' 

aber Sie müssen ein Konto mit ausreichenden Berechtigungen, dies zu tun oder es wird nicht funktionieren.

Ich denke, wenn Sie sicherstellen möchten, dass ein bestimmter SQL-Modus für Ihre Anwendung in Betrieb ist, ist der beste Weg, dies für jede neue Verbindung einzustellen.

+0

Danke ... Anscheinend war mein Problem die Syntax. SET SESSION sql_mode funktioniert aber SET @@ SESSION.sql_mode nicht. Sieht auch so aus, als müsste ich das in jede gespeicherte Prozedur schreiben. –

+0

Sie müssen es nicht in jede gespeicherte Prozedur einfügen. Wenn eine gespeicherte Prozedur ausgeführt wird, wird der SQL-Modus vorübergehend in den SQL-Modus geändert, der beim Definieren der Prozedur in Kraft war. Sie könnten einfach jede gespeicherte Prozedur mit dem von Ihnen gewählten SQL-Modus als einmalige Sache neu definieren. Wenn Sie über ein Konto mit ausreichenden Berechtigungen verfügen, können Sie alternativ eine UPDATE-Abfrage für die entsprechende INFORMATION_SCHEMA-Tabelle ausführen, um die SQL-Moduseinstellungen für Ihre Prozeduren zu ändern. – Hammerite

0

falsche Daten zu ermöglichen, benötigen Sie:

SET sql_mode = 'ALLOW_INVALID_DATES'; 

Aber Sie würden besser Ihre Anwendung festzulegen.

Verwandte Themen