Buscas no SQLSERVER sem distinção de caracteres com acentuação

por Fernando D'Angelo 2. março 2010 08:26

É comum em sites a existência de busca de conteúdo por palavra-chave.

Neste cenário, muitas pessoas quebram a cabeça para fazer com que a busca por palavras ignore a acentuação, ou seja, se o usuário digitar a palavra sem acentuação e no banco de dados ela estiver com acentuação, o sistema deverá encontrar tal registro. O contrário também deve ser válido.

Ao contrário do que muitos imaginam, a não distinção de caracteres com e sem acentuação é uma configuração do SQLSERVER e não é necessário criar métodos no código do site para isto. Basta para isso alterar o COLLATE dos campos de busca para um COLLATE que não faça essa distinção.

O COLLATE padrão do Português-BR no SQLSERVER 2005 é SQL_Latin1_General_CP1_CI_AS, onde o AS significa "Accent Sensitive", ou seja, Sensível à acentuação. Precisamos então alterar o COLLATE para SQL_Latin1_General_CP1_CI_AI, onde o AI significa "Accent Insensitive", ou seja, insensível à acentuação. Esta alteração basta para que a busca funcione corretamente.

No entanto, para complicar um pouco, a base de dados já está criada e com o COLLATE padrão do servidor de hospedagem, que não permite controle total da base de dados.

Assim sendo, não conseguimos ou é muito trabalhoso alterar o COLLATE da base de dados, da tabela ou da coluna.

Uma solução rápida é alterar alterar o COLLATE do campo na própria sintaxe SQL.

Para fazer uma busca em um banco de dados, com LIKE, sem que o sistema faça distinção entre palavras com e sem acento (ex: procurar por "acustica" e achar "acústica"), faça como no exemplo abaixo. É só inserir o COLLATE abaixo na string SQL.


... WHERE TX_NOME  COLLATE SQL_Latin1_General_CP1_CI_AI LIKE  '%acustica%' ...

 

Abs,

 

Fernando D'Angelo

Tags: , ,

Banco de Dados




Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading




Calendário

<<  setembro 2010  >>
seteququsedo
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

Ver os posts em um calendário maior

Para divulgar oportunidades aqui, entre em contato conosco enviando a descrição completa da vaga + uma data de validade para cada uma delas.

* As vagas divulgadas neste espaço são de inteira responsabilidade das empresas anunciantes.

Assine Nossa Newsletter

Quero ser notificado quando um novo Post for publicado