Wenn Sie versuchen, eine TEXT-Spalte in einer Tabelle zu erstellen und in MySQL einen Standardwert anzugeben, wird eine Fehlermeldung angezeigt (zumindest unter Windows). Ich kann keinen Grund erkennen, warum eine Textspalte keinen Standardwert haben sollte. Die MySQL-Dokumentation enthält keine Erklärung. Es scheint mir unlogisch (und etwas frustrierend, da ich einen Standardwert haben möchte!). Weiß jemand warum das nicht erlaubt ist?
mysql
default-value
Russ
quelle
quelle
TEXT
- diese Spalten können keinen Standardwert haben.VARCHAR
können.Antworten:
Windows MySQL v5 gibt einen Fehler aus, aber Linux und andere Versionen geben nur eine Warnung aus. Dies muss behoben werden. WTF?
Sehen Sie auch einen Versuch, dies als Fehler # 19498 im MySQL Bugtracker zu beheben:
Persönlich sehe ich das als Fehler an. Wenn Sie nach "BLOB / TEXT-Spalte kann keinen Standardwert haben" suchen, werden bei Google etwa 2.940 Ergebnisse zurückgegeben. Bei den meisten handelt es sich um Berichte über Inkompatibilitäten beim Versuch, DB-Skripts zu installieren, die auf einem System funktionieren, auf anderen jedoch nicht.
Ich habe jetzt das gleiche Problem mit einer Webanwendung, die ich für einen meiner Clients ändere und die ursprünglich unter Linux MySQL v5.0.83-log bereitgestellt wurde. Ich verwende Windows MySQL v5.1.41. Selbst wenn versucht wird, die neueste Version von phpMyAdmin zum Extrahieren der Datenbank zu verwenden, wird kein Standard für die betreffende Textspalte gemeldet. Wenn ich jedoch versuche, eine Einfügung unter Windows auszuführen (was bei der Linux-Bereitstellung problemlos funktioniert), wird in der ABC-Spalte der Fehler "Keine Standardeinstellung" angezeigt. Ich versuche, die Tabelle lokal mit dem offensichtlichen Standardwert neu zu erstellen (basierend auf einer Auswahl eindeutiger Werte für diese Spalte) und erhalte am Ende die ach so nützliche BLOB / TEXT-Spalte, die keinen Standardwert haben kann .
Auch hier ist es nicht akzeptabel, die grundlegende Kompatibilität zwischen Plattformen nicht aufrechtzuerhalten, und dies ist ein Fehler.
So deaktivieren Sie den strengen Modus in MySQL 5 (Windows):
Bearbeiten Sie /my.ini und suchen Sie nach einer Zeile
Ersetzen Sie es durch
Starten Sie den MySQL-Dienst neu (vorausgesetzt, es handelt sich um mysql5).
Wenn Sie Root- / Administratorzugriff haben, können Sie möglicherweise ausführen
quelle
Ohne tiefes Wissen über die mySQL-Engine würde ich sagen, dass dies nach einer Strategie zum Speichern von Speicher klingt. Ich gehe davon aus, dass der Grund für diesen Absatz aus den Dokumenten liegt :
Es scheint, als würde das Vorfüllen dieser Spaltentypen zu Speichernutzung und Leistungseinbußen führen.
quelle
Mit einem Trigger können Sie den gleichen Effekt wie mit einem Standardwert erzielen
quelle
Als Hauptfrage:
wird immer noch nicht beantwortet, ich habe eine schnelle Suche durchgeführt und einen relativ neuen Zusatz von einem MySQL-Entwickler bei MySQL Bugs gefunden :
Dies ist keine eindeutige Antwort, aber zumindest ein Ausgangspunkt für die Warum- Frage.
In der Zwischenzeit werde ich nur darum herum codieren und entweder die Spalte auf Null setzen oder explizit einen (Standard-
''
) Wert für jede Spalteinsert
aus dem Anwendungscode zuweisen ...quelle
"Unterstützung für DEFAULT in TEXT / BLOB-Spalten" ist eine Funktionsanforderung im MySQL Bugtracker (Bug # 21532) .
Ich bin nicht der einzige, der einen Standardwert in eine TEXT-Spalte einfügen möchte. Ich denke, diese Funktion sollte in einer späteren Version von MySQL unterstützt werden.
Dies kann in der Version 5.0 von MySQL nicht behoben werden, da dies anscheinend zu Inkompatibilität und Datenverlust führen würde, wenn jemand versuchen würde, eine Datenbank zwischen den (aktuellen) Datenbanken, die diese Funktion nicht unterstützen, und den Datenbanken, die diese unterstützen, hin und her zu übertragen diese Funktion.
quelle
Normalerweise führe ich Sites unter Linux aus, entwickle aber auch auf einem lokalen Windows-Computer. Ich bin oft auf dieses Problem gestoßen und habe gerade die Tabellen repariert, als ich auf die Probleme gestoßen bin. Ich habe gestern eine App installiert, um jemandem zu helfen, und bin natürlich wieder auf das Problem gestoßen. Also entschied ich, dass es Zeit war herauszufinden, was los war - und fand diesen Thread. Die Idee, den sql_mode des Servers in einen früheren Modus (standardmäßig) zu ändern, gefällt mir wirklich nicht, deshalb habe ich eine einfache (ich denke) Lösung gefunden.
Diese Lösung würde natürlich erfordern, dass Entwickler ihre Tabellenerstellungsskripte umschließen, um das unter Windows ausgeführte MySQL-Problem zu kompensieren. Sie werden ähnliche Konzepte in Dump-Dateien sehen. Eine große Einschränkung ist, dass dies Probleme verursachen kann / wird, wenn Partitionierung verwendet wird.
Das ist alles.
quelle
Für Ubuntu 16.04:
So deaktivieren Sie den strengen Modus in MySQL 5.7:
Bearbeiten Sie die Datei /etc/mysql/mysql.conf.d/mysqld.cnf
Wenn die folgende Zeile in mysql.cnf vorhanden ist
Dann ersetzen Sie es durch
Andernfalls
Fügen Sie einfach die folgende Zeile in mysqld.cnf hinzu
Dieses Problem wurde behoben.
quelle