一尘不染

Django固定装置失败,并指出“ DatabaseError:值太长,无法更改类型字符(50)”

django

我有一个夹具(json),它可以在开发环境中加载,但是在服务器环境中却无法加载。错误显示为:DatabaseError: value too long for type character varying(50)

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

好像灯具中的unicode标记在服务器上算作字符,它们导致某些字符串超过其字段的最大长度。但是,这在开发环境中不会发生。


阅读 447

收藏
2020-04-03

共1个答案

一尘不染

与众不同的是模板数据库的编码。在生产服务器上,它们具有ascii编码,而在开发箱上,它们是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';

现在,夹具可以顺利加载。

2020-04-03