当前位置:  开发笔记 > 后端 > 正文

Django夹具失败,说"DatabaseError:值太长,类型字符变化(50)"

如何解决《Django夹具失败,说"DatabaseError:值太长,类型字符变化(50)"》经验,为你挑选了2个好方法。

我有一个夹具(json),它在开发环境中加载,但在服务器环境中没有这样做.错误说:" DatabaseError: value too long for type character varying(50)"

我的开发环境是Windows和Postgres 8.4.服务器运行Debian和Postgres 8.3.两个系统中的数据库编码均为UTF8.

就好像夹具中的unicode标记计为服务器上的字符,它们会导致某些字符串超出其字段的最大长度.然而,这在开发环境中不会发生..



1> Steve Jalim..:

更新:Django 1.8中的50个字符限制现在为255

-

原始答案:

我今天下午刚刚遇到这个,我有一个修复(种类)

这篇文章暗示它是一个Django错误,与auth_permission允许的值的长度有关.进一步的挖掘支持这个想法,就像这张Django票一样(尽管它最初与MySQL有关).

基本上,基于模型的verbose_name和描述性权限字符串创建权限名称,并且该权限名称可以溢出到auth.models.Permission.name中允许的超过50个字符.

引用Django票的评论:

auth_permission.name列中字符串值的最长前缀是"可以更改"和"可以删除",两者都有11个字符.列的最大长度为50,因此Meta.verbose_name的最大长度为39.

一个解决方案是破解该列以支持> 50个字符(理想情况下通过南迁移,我说,这样很容易重复)但是我能想到的最快,最可靠的修复只是简单地使我的超长verbose_name定义更短(从verbose_name中的47个字符到大约20个字符).现在一切正常.



2> shanyu..:

那么,差异的是模板数据库的编码.在生产服务器上,他们使用ascii编码,而在dev框中则为utf-8.

默认情况下,postgres使用template1创建数据库.我的理解是,如果它的编码不是utf-8,那么即使你用utf-8编码创建它,你创建的数据库也会遇到这个问题.

因此我删除它并将其编码设置为UTF8重新创建它.下面的代码片段(取自此处):

psql -U postgres 

UPDATE pg_database SET datallowconn = TRUE where datname = 'template0';
\c template0
UPDATE pg_database SET datistemplate = FALSE where datname = 'template1';
drop database template1;
create database template1 with template = template0 encoding = 'UNICODE';
UPDATE pg_database SET datistemplate = TRUE where datname = 'template1';
\c template1
UPDATE pg_database SET datallowconn = FALSE where datname = 'template0';

现在夹具平稳地加载.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有