Python django中的syncdb出现问题

Python django中的syncdb出现问题,python,mysql,django,Python,Mysql,Django,我在django应用程序上不断出现此错误的原因是什么?我在webfaction上使用mysql,这是标准的,我已经将其设置为UTF8-我真的不能对此置之不理 “未能安装源的索引。类型模型:指定的键太长;最大键长度为767字节” 这是我的模型 from django.db import models import uuid import os class Messages(models.Model): name = models.CharField(max_length=255)

我在django应用程序上不断出现此错误的原因是什么?我在webfaction上使用mysql,这是标准的,我已经将其设置为UTF8-我真的不能对此置之不理

“未能安装源的索引。类型模型:指定的键太长;最大键长度为767字节”

这是我的模型

from django.db import models
import uuid
import os


class Messages(models.Model):
    name = models.CharField(max_length=255)
    message = models.CharField(max_length=255)
    show = models.DateTimeField(auto_now_add=True)
    hide = models.DateTimeField()
    def __unicode__(self):
        return self.name 





class Genre(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=300)
    meta = models.TextField(max_length=300)
    description = models.TextField(max_length=300)
    created = models.DateTimeField(auto_now_add=True)
    listing = models.BooleanField(default=True)
    def __unicode__(self):
        return self.name


class Category(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=300)
    meta = models.TextField(max_length=300)
    description = models.TextField(max_length=300)
    created = models.DateTimeField(auto_now_add=True)
    listing = models.BooleanField(default=True)
    def __unicode__(self):
        return self.name



class Images(models.Model):
    name = models.CharField(max_length=50)
    def get_file_path(instance, filename):
        ext = filename.split('.')[-1]
        filename = "%s.%s" % (uuid.uuid4(), ext)
        return os.path.join( 'images' , filename)
    image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
    def __unicode__(self):
        return self.name  




class Gallery(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=300)
    meta = models.TextField(max_length=300)
    description = models.TextField(max_length=300)
    images = models.ManyToManyField(Images)
    def __unicode__(self):
        return self.name    


class Article(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=300)
    category = models.ManyToManyField(Category)
    link = models.URLField(max_length=255)
    meta = models.URLField(max_length=255)
    description = models.TextField(max_length=300)
    content = tinymce_models.HTMLField()
    source_name = models.CharField(max_length=50)
    source_link=models.URLField()
    created = models.DateTimeField(auto_now_add=True)
    listing = models.BooleanField(default=True)
    def get_file_path(instance, filename):
        ext = filename.split('.')[-1]
        filename = "%s.%s" % (uuid.uuid4(), ext)
        return os.path.join( 'images' , filename)
    image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
    def __unicode__(self):
        return self.name

我认为这是MySQL中
VARCHAR
字段长度的问题

您使用的是
SlugField
,在后台也使用了
VARCHAR
,与
CharField
相同。相同的长度限制适用于两个字段,因此在slug字段中设置
max_length=300
是一个问题(300*3字节是900字节,正如错误所示,超过了767的最大值。如果您想知道767从何而来,则是765字节+)


SlugField
字段的
max\u length
属性减少到255,就可以开始了。

255个字符乘以3个字节/char=765个字节不是吗?哈,你完全正确,我不知道我是怎么做到的:p-编辑:实际上我读了一些mysql varchar类型和"... VARCHAR值存储为1字节或2字节长度前缀加上数据。“因此765+2字节作为前缀。