我有一个夹具(json),它可以在开发环境中加载,但是在服务器环境中却无法加载。错误显示为:DatabaseError: value too long for type character varying(50)“
DatabaseError: value too long for type character varying(50)
我的开发环境是Windows&Postgres 8.4。该服务器运行Debian和Postgres 8.3。在两个系统中,数据库编码均为UTF8。
好像灯具中的unicode标记在服务器上算作字符,它们导致某些字符串超过其字段的最大长度。但是,这在开发环境中不会发生。
与众不同的是模板数据库的编码。在生产服务器上,它们具有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';
现在,夹具可以顺利加载。