[firebase-br] Collate e Character Set
Pha-Lista
lista em pha.com.br
Qui Jan 20 13:30:27 -03 2005
>> 4) Fiz, então, a consulta:
>> select * from PAIS where YYYY collate win_ptbr = 'ALEMANHA'
O correto é:
select * from PAIS where YYYY = 'ALEMANHA'
Retire a parte "collate win_ptbr", o campo já foi definido com este collate, todas as operações usarao o collate definido para o campo.
So deve especificar o collate quando este for diferente do collate do campo, mais neste caso os indices nao serao utilizados.
PHA
Nova Odessa / SP - Brazil
-----Mensagem original-----
From: "Edson T. Marques" marques em oriontec.com.br
Date: Thu, 20 Jan 2005 14:56:14 -0300
To: FireBase lista em firebase.com.br
Subject: Re: [firebase-br] Collate e Character Set
> Pha-Lista escreveu:
>
> >5) select * from PAIS where NOME collate WIN_PTBR = 'ALEMANHA'
> > Resultado: Retornou o registro referente a Alemanha e estabeleceu
> >automaticamente o seguinte PLAN:
> > PLAN: (PAIS NATURAL)
> >
> >6) select * from PAIS where Upper(NOME) = 'ALEMANHA' plan (PAIS index
> >(RDB$PRIMARY92))
> > Resultado: Erro na consulta: "o PLAN não pode ser usado para essa
> >consulta"
> >
> >7) select * from PAIS where NOME collate WIN_PTBR = 'ALEMANHA' plan
> >(PAIS index (RDB$PRIMARY92))
> > Resultado: Erro na consulta: "o PLAN não pode ser usado para essa
> >consulta"
> >
> >Se você criar o campo com o collate WIN_PTBR, o indice será utilizado.
> >
> >Da forma como você fez, está convertendo os dados entre os Collate, dessa forma o indice não é utilizado, é como se você estivesse utilizando um função, o principio é o mesmo.
> >
> >Faço o teste:
> >
> >1) Crie um novo campo.
> >
> >ALTER TABLE TABELA
> >ADD NOME2 COLLATE WIN_PTBR;
> >
> >2) Copie os dados do campo NOME para NOME2
> >
> >3) Crie um indice para o campo NOME2
> >
> >4) Refaça os testes, e nos passe o resultado
> >
> Fiz isso que foi pedido: (Usando o IBExpert)
>
>
> 1) criei o campo:
> alter table PAIS add YYYY VARCHAR(50) collate win_ptbr;
>
> create index ie_Pais_YYYY on PAIS (YYYY);
>
> update PAIS set YYYY = NOME;
> 2) "Comitei" tudo.
>
> 3) Para testar: fiz uma consulta assim:
> select * from PAIS where YYYY = 'Alemanha'.
> O resultado foi OK e o PLAN usado foi PLAN (PAIS INDEX (ie_Pais_YYYY)).
>
> 4) Fiz, então, a consulta:
> select * from PAIS where YYYY collate win_ptbr = 'ALEMANHA'
>
> E o resultado foi o segunte:
>
> a) A consulta foi executada sem problemas.
> b) O retorno foi o registro referente à Alemanha (cito que o campo YYYY
> para o registro tinha o valor 'Alemanha')
> c) O PLAN automaticamente calculado foi PLAN (PAIS NATURAL).
>
> Só se eu fiz algo errado ou meus programas estão malucos, mas eu repetí
> isso duas vezes e o resultado foi o mesmo.
> O Indice não está sendo usado para a consulta. Ou, se está sendo, não é
> isso que aparece no Rodapé do SQL Editor do IBExpert.
> Poderia ser isso?
>
> Edson.
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Mais detalhes sobre a lista de discussão lista