You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移MySQL时UUID字段报OperationalError错误求助

解决Django从SQLite迁移到MySQL时UUID字段的唯一索引错误

问题根源

MySQL不允许未指定长度的TEXT类型字段作为唯一键(因为TEXT属于大字段,全内容索引效率极低),所以会抛出BLOB/TEXT column 'uuid' used in key specification without a key length错误。你之前的尝试没解决,大概率是迁移缓存或字段配置细节的问题。

解决方案

方案1:正确使用UUIDField(推荐)

Django的UUIDField在MySQL中会映射为CHAR(36),天然支持唯一索引,之前报错可能是旧迁移文件残留导致冲突。按以下步骤操作:

  1. 清理旧迁移记录:
    • 删除你的app目录下migrations文件夹中除__init__.py外的所有文件
    • 执行命令重置迁移状态:python manage.py migrate --fake [你的app名] zero
  2. 修改模型字段:
    import uuid
    from django.db import models
    
    class YourModel(models.Model):
        uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
        # 其他字段...
    
  3. 重新生成并执行迁移:
    python manage.py makemigrations
    python manage.py migrate
    

方案2:给TextField指定固定长度

UUID字符串固定是36位,给TextField设置max_length=36后,Django会在MySQL中创建VARCHAR(36)类型,就能正常添加唯一索引:

import uuid
from django.db import models

class YourModel(models.Model):
    # 显式转成字符串,避免UUID对象存储的潜在问题
    uuid = models.TextField(
        default=lambda: str(uuid.uuid4()),
        editable=False,
        unique=True,
        max_length=36
    )
    # 其他字段...

之后重新执行makemigrations和migrate即可。

方案3:视图层手动保证唯一性

如果不想依赖数据库的唯一约束,可以在创建对象时自行生成UUID并检查唯一性(注意高并发场景需加锁或事务):

  1. 修改模型字段(去掉unique=True):
    import uuid
    from django.db import models
    
    class YourModel(models.Model):
        uuid = models.TextField(editable=False)
        # 或用UUIDField:uuid = models.UUIDField(editable=False)
        # 其他字段...
    
  2. 在视图中处理:
    import uuid
    from django.db import transaction
    from .models import YourModel
    
    def create_your_object(request):
        # 用事务+循环保证唯一性
        with transaction.atomic():
            while True:
                new_uuid = str(uuid.uuid4())
                if not YourModel.objects.filter(uuid=new_uuid).exists():
                    break
            YourModel.objects.create(uuid=new_uuid, ...)
        # 后续响应逻辑...
    

内容的提问来源于stack exchange,提问作者Randusr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:30:59