DatabaseError:类型字符变化的值太长(100)

时间:2012-01-27 15:52:46

标签: django postgresql

我有一个运行我们几年前在内部构建的迷你CMS的Django网站,它使用的是postgresql。保存简单标题和文本段落时,我收到以下错误:

value too long for type character varying(100)

奇怪的是,不是单个列变化(100)它们都是200或250,即使默认的Django由于re-opened ticket mentioned here

而已从100更改为200

有谁知道这个问题的解决方案?

14 个答案:

答案 0 :(得分:60)

我可以打赌,你有一个没有预定义长度的SlugField吗?将其设置为255并迁移

答案 1 :(得分:25)

使用文件字段时我也遇到了这个问题,并且有一段时间我在挠头。当然,默认的FileField实例创建时具有100个字符的限制。

https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield

答案 2 :(得分:13)

这是来自Postgres的错误消息,而不是django。

您似乎更改了models.py中字段的长度,但这并未更改执行manage.py syncdb时创建的数据库长度。

您必须直接更改数据库中字段的长度。

答案 3 :(得分:1)

Michael Samoylov的回答指出了我正确的方向。我遇到了同样的错误,除了它是FileField。

即使您没有明确设置max_length,字段也会有max_length。增加该值以使数据适合以避免错误。

在我的情况下,数据太大而无法合理地存储在数据库中。我将文件保存到磁盘,然后将文件路径保存在数据库中。

答案 4 :(得分:0)

我意识到这个问题已经得到解答,但是在寻找错误信息时来到这里的其他人:

在我的情况下,问题是我的表名超过了50个字符。显然这是不允许的。更改表名解决了问题。

在此处阅读更多内容:https://code.djangoproject.com/ticket/18959

答案 5 :(得分:0)

我和django-autoslugfield有类似的问题 我正在使用类似的包,然后切换到django-autoslugfield

我收到了这个错误: value too long for type character varying(50)

尽管我的models.py有:

slug = AutoSlugField(max_length=255, populate_from='name', unique=True)

在我的数据库中它的类型是 character varying 255

一旦我从字段中移除max_length=255,即

slug = AutoSlugField(populate_from='name', unique=True)

然后它运作良好

答案 6 :(得分:0)

如果您使用的是Django,并且这些都不起作用。尝试删除所有迁移文件并再次运行

python manage.py makemigrations

然后

python manage.py migrate

答案 7 :(得分:0)

如果不是SlugFieldFileField或此处提到的任何其他字段,请滚动回到迁移卡在终端的位置。对我来说是AddField

好说话。

答案 8 :(得分:0)

Django 2.1

我从sqlite3切换到postgresql时遇到了这个问题。 删除每个应用程序的迁移文件夹中的迁移文件,但 __ init __。py 除外 然后重新运行迁移

(venv)myapp$python manage.py makemigrations
(venv)myapp$python manage.py migrate
(venv)myapp$python manage.py runserver

答案 9 :(得分:0)

首先,尝试对模型中所有适用的字段类型将max_length设置为合理的值。

例如:MyText = models.CharField(max_length=2000)

如果您未设置max_length,则您的数据库可能正在应用默认的max_length,该长度短于输入数据的长度,从而导致您的value too long for type character错误。

如果这不起作用,并且您从SQLite开始并将数据库更改为PostgreSQL,则以前从SQLite进行的迁移可能会干扰新的PostgreSQL迁移。

进入项目的迁移文件夹,并删除旧的迁移文件以重新开始。然后尝试makemigrations并再次迁移:)

答案 10 :(得分:0)

我也遇到了同样的错误。当我对模型进行更改时,我仍然遇到相同的错误。

这是我修复它的方式。 可能有必要跳过少量迁移,以便仅使用对CharField max_lenght进行了更改的迁移程序。

为此,您必须运行

python manage.py showmigrations 

查看尚未进行的迁移。

然后跳过它们,直到使用命令到达最后一个

python manage.py migrate <app> 000_migration_number --fake 

答案 11 :(得分:0)

model.py中的

预定义字段会造成问题。将其扩展到所需的长度,我认为问题将得到解决。

答案 12 :(得分:0)

该值可以是 100 或 25 或 17 无论如何,其背后的原因是模型,搜索您添加特定长度(17,25)的位置,您将得到错误! ,

您试图强加的字段长度超过上述长度。

解决了我的问题,希望对你也有帮助

答案 13 :(得分:0)

对于 FileField 和 ImageField,来自 Django 文档:

FileField 实例在您的数据库中创建为 varchar 列,默认最大长度为 100 个字符。与其他字段一样,您可以使用 max_length 参数更改最大长度。