【发布时间】:2017-10-23 11:29:05
【问题描述】:
我有一个名为 test 的数据库,只有一列,即名称为 some_data 的 character varying 列。该数据库具有编码 UTF8 和排序规则 de_DE.utf8。
在注册 unicode 类型后建立与此数据库的连接,如下所示:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
我建立连接
C_test = psycopg.connect(myhost [...])
并在连接上打开光标
cur_test = C_test.cursor()
我将我的数据作为 unicode 字符串插入到 test,所以当我这样做时:
cur_prod.execute("INSERT INTO test some_data VALUES ("+u'ö'+");")
该表应将 unicode u'ö' 保存为 'UTF8' 字符串 "\xc3\xb6"。
当我选择插入的值时,UNICODE 扩展保证让我返回 unicode,事实上,当我选择并打印该值时,我得到 '\xf6','ö' 的 unicode。如果我在光标上使用 mogrify,例如:
cur_test.mogrify(u'%s',(u'ö',))
我得到一个类似"'\xc3\xb6'" 的字符串,由于 UnicodeDecode 错误,我无法插入该字符串。长话短说:我可以将 mogrify 与注册的 unicode 扩展一起使用,还是应该在没有 mogrify 的情况下进行字符串连接?
【问题讨论】:
标签: python-2.7 unicode encoding utf-8 psycopg2