﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35032	Cannot save record with UUID field after migrating existing UUIDField created in Django < 5.0	Emanuel Andrecut	Emanuel Andrecut	"Django 5.0 release notes specifies that on MariaDB 10.7+, UUIDField is now created as UUID column rather than CHAR(32) column and migrations where ""char(32)"" is hardcoded must be added to keep compatibility for UUIDField<s> created before version 5.0: https://docs.djangoproject.com/en/5.0/releases/5.0/#migrating-existing-uuidfield-on-mariadb-10-7

However after applying such migrations as described in the release notes records cannot be saved anymore:

{{{
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/query.py"", line 953, in get_or_create
    return self.create(**params), True
           ^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/query.py"", line 677, in create
    obj.save(force_insert=True, using=self.db)
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/base.py"", line 814, in save
    self.save_base(
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/base.py"", line 901, in save_base
    updated = self._save_table(
              ^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/base.py"", line 1059, in _save_table
    results = self._do_insert(
              ^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/base.py"", line 1100, in _do_insert
    return manager._insert(
           ^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/manager.py"", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/query.py"", line 1845, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py"", line 1822, in execute_sql
    cursor.execute(sql, params)
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/backends/utils.py"", line 79, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/backends/utils.py"", line 92, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/backends/utils.py"", line 100, in _execute
    with self.db.wrap_database_errors:
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/utils.py"", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/backends/utils.py"", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py"", line 75, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/MySQLdb/cursors.py"", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ""/home/manu/venv/lib/python3.11/site-packages/MySQLdb/cursors.py"", line 330, in _query
    db.query(q)
  File ""/home/manu/venv/lib/python3.11/site-packages/MySQLdb/connections.py"", line 255, in query
    _mysql.connection.query(self, query)
django.db.utils.DataError: (1406, ""Data too long for column 'id' at row 1"")
}}}

That is because, before this commit https://github.com/django/django/commit/7cd187a5ba58d7769039f487faeb9a5a2ff05540, `has_native_uuid_field` would return False and after the 5.0 change, saving an  UUID for old fields that must still use CHAR(32) will not try to save it using the hex value of UUID: https://github.com/django/django/blob/main/django/db/models/fields/__init__.py#L2737
"	Bug	closed	Database layer (models, ORM)	5.0	Release blocker	fixed	uuid, mariadb, UUIDField, DataError	raydeal	Ready for checkin	1	0	0	0	0	0
