É 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