我有一个带有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"
好的,这解释了为什么它认为我试图插入一个空字节。 (因为我。)所以现在我已经足够了解Jonathan S.在django-users group上找到类似的报告会出现什么问题但是,就像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
答案 0 :(得分:42)
最后成功解决了问题。
this ticket中记录的差异在于Postgres 9.1默认情况下启用了standard_conforming_strings
。这不会是一个问题,真的,除了Django的适配器有一个基本上忽略它的bug。 A patch was submitted这对我有用。
对于不愿意或无法应用修补程序或升级的人,您只需使用this database adapter instead。