我有一个包含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 group找到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