Quando crio uma tabela como esta
create table char_test(
item varchar(10) collate SQL_Latin1_General_CP1_CI_AS
)
go
Eu posso armazenar varchars contendo ≥
insert into char_test values ('≥');
quando eu faço um
select item from char_test;
eu recebo
item
----------
=
mas usando
select replace(item, '≥', '>=') from char_test;
dá
-----------------
>=
Então o banco de dados conhece o personagem. Como posso converter a string em um nvarchar mostrando esse caractere?
Editar:
O fato importante aqui é que o SQL Server aqui mapeia alguns caracteres diferentes para o mesmo caractere sem gerar erros ou avisos.
Eu ouso chamar isso de design muito ruim.
varchar não suporta
≥
: somente unicodeIsso inclui o literal
'≥'
que é varchar tambémO agrupamento aqui não importa: isso é classificação e comparação, masnunca visto antes!Um pouco mais de SQL para usar sua tabela
Edit: depois de mais jogar
Se você tem um valor, então use CP 437
Nota: o ASCII é 242 mas também não vai dar :-)
Você pode controlar isso com agrupamento de banco de dados, mas, francamente, use unicode ...
Se eu executar isso:
Todos retornam o mesmo número, 61. Não acho que REPLACE prova que o personagem está sendo reconhecido. Eu até mudei a tabela char_test para ter a coluna do item definida como nvarchar(10) e ela ainda não reconhece o '≥'.
Meu melhor palpite aqui é que você precisa de um agrupamento diferente ou inserir os dados usando um método diferente do SSMS (supondo que você tenha feito o mesmo que eu).
HTH