Pessoal, ontem estava fazendo uma importação de um arquivo CSV, na verdade hoje ainda estou nele e está de rosca, mas enfim, um dos problemas que tive foram na parte das cidades, onde umas estavam com acentos e outras não, ex: São Paulo –> Sao Paulo.
Isto pode ser corrigido com o collation (configuração e maneira como o banco de dados trabalha com os caracteres) de várias maneiras.
No SQL Server ele herda o collation do banco ao criar uma tabela. e isto pode ser personalizado a nível de coluna, até mesmo de SQL.
O collation default, no meu caso, estava como o do Windows – “Latin1_General”.
No meu caso alterei a coluna da minha tabela para o “Latin1_General_CI_AI”, que armazena os caracteres, mas fica indiferente na hora da consulta.
Sendo assim, eu posso fazer um where com “São Paulo”, ou “Sao Paulo” e o resultado é o mesmo.
Não é muito bom generalizar, então apliquei somente na coluna de nome da cidade neste caso para poder usar com o LINQ. Ainda não achei uma forma de fazer o LINQ executar o collation no sql, o que seria fantástico, pois em uma instrução de SQL normal conseguimos fazer algo assim:
select * from cidade where Nome like '%São%'
collate Latin1_General_CI_AI
Para alterar uma coluna da tabela, você pode usar o SQL Management, clicando com o Botão direito na tabela > Design:
Depois selecione a coluna e na janela de column properties localize o item collation:
Ou então criar alterar a coluna da tabela passando o collation:
CREATE TABLE dbo.Tmp_Cidade
(
Id int NOT NULL IDENTITY (1, 1),
Uf varchar(2) NOT NULL,
Nome varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
Obs: Não funciona para “Ç”
Obs: Com a coluna alterada o LINQ funciona normalmente.
0 comentários:
Postar um comentário