[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