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

Django集成MySQL后加载页面报UUID格式错误求助

解决Django+MySQL中"badly formed hexadecimal UUID string"错误

这个报错本质是Django的UUID字段在解析数据库中的值时,发现它不是合法的32位十六进制UUID格式,咱们一步步来排查修复:

1. 先定位数据库里的问题数据

首先要确认你的MySQL数据库中,对应UUID字段的条目是不是有格式错误:

  • 可能是带了连字符的UUID(比如123e4567-e89b-12d3-a456-426614174000,长度是36位,而Django默认期望32位无连字符的);
  • 或者长度不是32位的字符串、空值,甚至包含非十六进制的字符。

你可以用SQL语句快速排查:

-- 找出长度不等于32的条目
SELECT your_uuid_column FROM your_table WHERE LENGTH(your_uuid_column) != 32;

-- 找出带连字符的条目
SELECT your_uuid_column FROM your_table WHERE your_uuid_column LIKE '%-%';

2. 修正数据库中的错误数据

根据排查结果针对性修复:

  • 如果是带连字符的UUID,直接用SQL去掉连字符:
    UPDATE your_table SET your_uuid_column = REPLACE(your_uuid_column, '-', '') WHERE your_uuid_column LIKE '%-%';
    
  • 如果是无效的短字符串/非法字符,要么生成合法的32位UUID替换(可以用uuid.uuid4().hex生成),要么根据业务逻辑删除这些无效条目。

3. 检查Django模型和数据写入逻辑

确保你的模型和代码不会再产生错误数据:

  • 自动生成UUID的正确写法:如果是让Django自动生成UUID,模型里应该这么写:
    from django.db import models
    import uuid
    from django.db.models import UUIDField
    
    class YourModel(models.Model):
        id = UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        # 其他字段...
    
    这里uuid.uuid4()生成的是UUID对象,Django会自动将其转换为32位无连字符的十六进制字符串存入数据库。
  • 手动赋值UUID的注意事项:如果是手动给UUID字段传值,要么传入不带连字符的32位字符串,要么先把带连字符的UUID转成hex格式:
    # 把带连字符的UUID转成32位hex
    valid_uuid_hex = uuid.UUID("123e4567-e89b-12d3-a456-426614174000").hex
    obj = YourModel.objects.create(uuid_field=valid_uuid_hex)
    
    # 或者直接传入UUID对象,Django会自动处理
    obj = YourModel.objects.create(uuid_field=uuid.uuid4())
    
  • 如果需要兼容带连字符的存储:要是你的业务必须存36位带连字符的UUID,可以给UUIDField加上format='hex_verbose'参数,但要确保数据库里的所有数据都是带连字符的格式:
    class YourModel(models.Model):
        uuid_field = UUIDField(format='hex_verbose')
    

4. 验证修复效果

修正数据和代码后,重启Django服务器,重新加载页面。也可以打开Django shell执行YourModel.objects.all(),如果没有抛出错误,说明问题已经解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:35:46