diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index 242083b85073..dad3f8d916a1 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -412,7 +412,11 @@ def db_default_sql(self, field): """Return the sql and params for the field's database default.""" from django.db.models.expressions import Value - sql = "%s" if isinstance(field.db_default, Value) else "(%s)" + sql = ( + self._column_default_sql(field) + if isinstance(field.db_default, Value) + else "(%s)" + ) query = Query(model=field.model) compiler = query.get_compiler(connection=self.connection) default_sql, params = compiler.compile(field.db_default) diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt index 64ffcb88bdae..a385fbd13eff 100644 --- a/docs/releases/5.0.2.txt +++ b/docs/releases/5.0.2.txt @@ -32,3 +32,7 @@ Bugfixes * Fixed a regression in Django 5.0 that caused the ``request_finished`` signal to sometimes not be fired when running Django through an ASGI server, resulting in potential resource leaks (:ticket:`35059`). + +* Fixed a bug in Django 5.0 that caused a migration crash on MySQL when adding + a ``BinaryField``, ``TextField``, ``JSONField``, or ``GeometryField`` with a + ``db_default`` (:ticket:`35162`). diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 3a026281bdec..cde3d7f99146 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -2303,6 +2303,19 @@ class Meta: columns = self.column_classes(Author) self.assertEqual(columns["birth_year"][1].default, "1988") + @isolate_apps("schema") + def test_add_text_field_with_db_default(self): + class Author(Model): + description = TextField(db_default="(missing)") + + class Meta: + app_label = "schema" + + with connection.schema_editor() as editor: + editor.create_model(Author) + columns = self.column_classes(Author) + self.assertIn("(missing)", columns["description"][1].default) + @skipUnlessDBFeature( "supports_column_check_constraints", "can_introspect_check_constraints" )