22

我有一个带有 PointField 属性的地理模型。一切都在本地完美运行,但是当我尝试在服务器上保存实例时,出现以下错误:

django.db.utils.DatabaseError: invalid byte sequence for encoding "UTF8": 0x00

我深入研究了源代码,发现值的序列化方式不同;具体来说,在服务器上执行查询之前,该值不会被转义。看起来转义正在完成psycopg2.Binary.getquoted(),果然,它没有在服务器上返回正确的值。

在我的机器上:

from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\\\000'::bytea"

在服务器上:

from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\000'::bytea"

好的,这就解释了为什么它认为我正在尝试插入一个空字节。(因为我是。)所以现在我知道出了什么问题,可以在django-users 组中找到 Jonathan S. 的类似报告,但是像 Jonathan 一样,我不知道这是错误还是配置错误。

有人可以指出我正确的方向吗?

以下是有关设置的一些信息:

          My computer      Server
OS        OSX 10.7         CentOS 5.5
Python    2.7              2.6
Django    1.3              1.3
Postgres  9.0.4            9.9.1
postgis   1.5.2            1.5.3-2.rhel5
geos      3.3.0            3.3.0-1.rhel5
4

1 回答 1

42

终于设法弄清楚了。

此票证中记录的不同之处在于 Postgres 9.1standard_conforming_strings默认开启。这不会是一个问题,真的,除了 Django 的适配器有一个基本上忽略它的错误。提交了一个补丁,它对我有用。

对于那些不愿意或无法应用补丁或升级的人,您可以使用这个数据库适配器来代替

于 2011-10-07T02:20:31.130 回答