Es scheint es eine Bruch Änderung in MariaDB ist 10.2.7, wenn Sie versuchen, ein Feld auf NULL festlegbare Datetime-Spalte zu umbenennen und Sie erhalten eine Fehlermeldung, wenn Sie eine Migration ausführen:Laravel Migration umbenennen Nullable Field Workaround?
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'due_date' (SQL: ALTER TABLE test
CHANGE dueDate due_date DATETIME DEFAULT 'NULL')
Migration erstellen:
class CreateTestTable extends Migration
{
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->dateTime('dueDate')->nullable();
});
}
}
eine zweite Migration erstellen Sie die Spalte umbenennen:
class RenameColumn extends Migration
{
public function up()
{
Schema::table('test', function(Blueprint $table) {
$table->renameColumn('dueDate', 'due_date');
});
}
}
gibt es eine Abhilfe diese Arbeit zu bekommen?
Nach Lehre/dbal issue:
Um Ausdrücke als Standardwerte zu ermöglichen, und unterscheiden sie von Literalen, MariaDB zitiert nun Standardwerte in information_schema.column Tabelle. Diese Änderung bringt eine Menge von Inkompatibilitäten zwischen den (Oracle-) Mysql/MariaDB-Plattformen mit sich.
Anstatt eine spezifische SchemaManager für MariaDB zu schaffen, ist die Lösung in diesem P genommen/R der eingeführten Änderungen in der aktuellen MySQLSchemaManager abzubilden (Methode: getMariaDb1027ColumnDefault()).
Von MariaDB 10.2.7, Informationen Schemaänderungen enthält:
NULL jetzt als 'NULL' zitiert wird (Ausnahme, wenn colum nicht standardmäßig NULL-Werte zulässt und kein Standard zur Verfügung gestellt: NULL wird in information_schema gespeichert), EDIT : siehe Ausnahme https://jira.mariadb.org/browse/MDEV-14053 String-Standardwerte sind in Anführungszeichen (Um die Zeichenfolge 'NULL' zu speichern, setzen Sie den Standardwert auf '' NULL ''). Escaping: "'" werden im Informationsschema automatisch in "' '" geändert. Dies sollte keine Auswirkungen haben, es sei denn, Sie manuell Standardwerte mit "'" in Ihre Modelle (Schema diff). Siehe auch Punkt 5. Standard-Literalwerte müssen in Anführungszeichen gesetzt werden, was die Unterstützung für automatische CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME-Standardwerte automatisch in 'current_timestamp()', 'currdate()', 'currtime()' bringt. Um das Schema diff zu verhindern, werden sie auf ihre ursprünglichen Werte zurückgesetzt.
Haben Sie versucht '$ Tabelle-> UmbenennenColumn ('Fälligkeitsdatum', 'Fälligkeitsdatum') -> Nullable()'? –
Haben Sie versucht, die Spalte nicht nullbar zu machen, umzubenennen und sie dann wieder nullfähig zu machen? '$ table-> Nullable (false) -> change()' –