Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Collate/ODS


DiabloX3

Pergunta

Olá

to com um probleminha aqui. tenho o ibexpert 2007 e firebird 2.5 instalados.

fiz um form de consulta no delphi com edit e nele a pessoa pode digitar acentos de todos os tipos e no meu BD eu defini como charset win1252 e o collate automaticamente foi para win1252. acontece que ele está diferenciando palavras acentuadas das não acentuadas. pesquisei até agora mas não vi um tópico solucionando o meu problema. todo mundo fala pra definir o campo como collate win_ptbr. para isso eu tenho q ter essa opção disponível, o que não é meu caso... quando tento criar um campo "nome varchar(10) collate win_ptbr dá erro e fala que esse collate é desconhecido, e pra alterar sem ser via codigo, aparece 5 opções com PXW no começo e + essa Win1252.

O que eu quero é saber porque isso esta acontecendo e porque SÓ EU não tenho como trocar e como resolver isso pra poder pesquisar josé = jose = JoSé

Não sei se tem alguma coisa a ver com o problema mas andei vendo que para o fb2.5 o ib deveria mostrar ODS 11.2 no entando o meu esta mostrando 10.1

abraços

Editado por DiabloX3
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Exemplo:

SELECT * FROM atestado WHERE EMPRESA LIKE '%COM_RCIO%'

SELECT * FROM CADEMPRESA WHERE EMPRESA LIKE '%COMERCIO%'

OR EMPRESA LIKE '%COMÉRCIO%'

Serve para procurar todas as palavras que contenham COMÉRCIO OU COMERCIO

ou seja palavras acentuas ou não

Nome varchar(50) CHARACTER SET WIN1252 COLLATE PXW_INTL850, desta forma o collate

serve como auxílio de ordenação também dos valores com acento.

IBQ.SQL.Add('select * from TB_NOME');

IBQ.SQL.Add('where Upper(COL_CIDADE collate win_ptbr) like "%' + edLocalizar.Text + '%"');

IBQ.SQL.Add('where Upper(COL_CIDADE COLLATE PXW_INTL850) like "%' + edLocalizar.Text + '%"');

no banco de dados você tem que colocar o charset WIN1252 e o collate win_ptbr

Collate Win_PTBR e PT_BR - Firebird

O collate Win_PTBR (Character Set Win1252) tem as seguintes características:

- não diferencia letras maiúsculas de minúsculas e nem acentuadas de

não acentuadas nas operações de procura/comparação e ordenação.

- pode ser criado um índice com campo de até 250 caracteres (os demais collates só aceitam 83)

O collate PT_BR (Character Set ISO8859-1) tem as seguintes características:

- não diferencia letras maiúsculas de minúsculas e nem acentuadas de

não acentuadas nas operações de procura/comparação e ordenação.

- pode ser criado um índice com campo de até 250 caracteres (os demais

collates só aceitam 83)

á é í ó ú ã ç

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Achei meio confusa sua explicação, Jhonas. Você acabou falando as coisas meio juntas e eu acabei por não saber qual eu deveria usar (fiquei na mesma) e o por que não estou conseguindo usar o win_ptbr com o FB 2.5 (não veio junto() e se tem alguma coisa a ver com a versão do interbase (ODS version - e talvez como atualizá-la).

Esse primeiro exemplo que você deu eu tinha encontrado em um tópico seu anteriormente mas assim como cara falou não tem como prever tudo o que a pessoa vai digtar, tem que usar collate mesmo.

Eu fiz um teste com o pxw_intl850 e consegui ordernar da maneira que eu quero e também consegui digitar "A" e me trouxe registros com "Á Ã" mas se isso deu certo e é isso que o win_ptbr faz, eu posso usar o pxw_intl850 sempre?

Link para o comentário
Compartilhar em outros sites

  • 0
Achei meio confusa sua explicação
Vamos lá...

SELECT * FROM atestado WHERE EMPRESA LIKE '%COM_RCIO%'
voce pode usar o caracter coringa '_' na letra da palavra que tem o acento, dessa maneira o select traz todas as palavras acentuadas ou não
SELECT * FROM CADEMPRESA WHERE EMPRESA LIKE '%COMERCIO%'
OR EMPRESA LIKE '%COMÉRCIO%'
neste select voce coloca implicitamente a pesquisa com a palavra sem acento e acentuada
Nome varchar(50) CHARACTER SET WIN1252 COLLATE PXW_INTL850
desta forma o collate serve como auxílio de ordenação também dos valores com acento, onde essa definição é feita dentro da tabela
IBQ.SQL.Add('where Upper(COL_CIDADE COLLATE PXW_INTL850) like "%' + edLocalizar.Text + '%"');

nesse caso acima, independentemente do CHARACTER SET WIN1252 estar definido na tabela voce pode mudar o COLLATE em tempo de execução

Eu fiz um teste com o pxw_intl850 e consegui ordernar da maneira que eu quero e também consegui digitar "A" e me trouxe registros com "Á Ã" mas se isso deu certo e é isso que o win_ptbr faz, eu posso usar o pxw_intl850 sempre?

pode

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...