我在我的postgres 9.2
上尝试此查询SELECT ar.nome_defensor, count(*)
FROM sirdp.atividade_realizadas ar
INNER JOIN sirdp.naturezas n on n.id = ar.natureza_id
INNER JOIN sirdp.atividades at on at.id = n.atividade_id
WHERE ar.data_atividade between '01/08/2011' and '31/08/2014'
and ar.local_atuacao_defensor in ('1ª Vara de Acara\303\272')
group by ar.nome_defensor
order by ar.nome_defensor
它不起作用,但在9.0上它可以工作。
我认为它与参数1ª Vara de Acara\303\272
有关,因为问题在于重音词。
两个数据库都有此配置:
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'pt_BR.UTF-8'
LC_CTYPE = 'pt_BR.UTF-8'
CONNECTION LIMIT = -1;
答案 0 :(得分:1)
我认为它有参数:1ªVarade Acara \ 303 \ 272 因为问题在于重音词。
是。 Postgresql 9.0和之前的配置参数standard_conforming_strings
默认设置为OFF,这意味着这个字符串文字:
'1ª Vara de Acara\303\272'
在UTF-8编码的上下文中被解释为:1ª Vara de Acaraú
自PostgreSQL 9.1以来,默认情况下此standard_conforming_strings
已经变为ON,所以现在反斜杠被解释为反斜杠。这在the documentation:
standard_conforming_strings(boolean) 这控制普通的字符串文字('...')是否按字面意思处理反斜杠,如SQL标准中所规定的那样。从...开始 PostgreSQL 9.1,默认打开(先前版本默认为关闭)。 应用程序可以检查此参数以确定字符串文字的方式 将被处理。此参数的存在也可以视为 表示支持转义字符串语法(E'...')。 如果是,则应使用转义字符串语法(第4.1.2.2节) application希望反斜杠被视为转义字符。
你可以通过以下方式逃避:
1ª Vara de Acaraú
。毕竟,ª
字符已不在US-ASCII范围内,因此提交查询的方法已经支持重音。E'1ª Vara de Acara\303\272'
。standard_conforming_strings
设置为OFF以切换回PostgreSQL 9.0及以前版本的行为。