Artigo: 305704 - Última revisão: sexta-feira, 3 de Outubro de 2003 - Revisão: 3.2

PROBLEMA: Windows collations ignorar uma proposta e hífen quando a encomenda

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

Uma plica (') ou um apóstrofo (') e hífen (-) são considerados pela última vez quando o SQL Server 2000 Ordena os dados armazenados com o Microsoft Windows agrupamentos. Para ilustrar este comportamento, considere o seguinte exemplo:
CREATE TABLE t1(c1 VARCHAR(10) COLLATE Latin1_General_CI_AI)

INSERT INTO t1 VALUES ('car''s')
INSERT INTO t1 VALUES ('cars')
INSERT INTO t1 VALUES ('carps')
INSERT INTO t1 VALUES ('car-s')
GO
SELECT * FROM t1 ORDER BY c1 ASC
GO
				
o resultado é:
c1         
---------- 
carps
cars
car's
car-s

(4 row(s) affected)
				

Causa

Em comparações de agrupamento que utilizam Windows agrupamentos, caracteres como uma plica (') ou hífen (-) são comparados pela última vez, só depois são comparados com os caracteres de alfabeto normal. Por exemplo, quando o SQL Server compara "carro" e "automóvel", SQL Server compara os caracteres de alfabeto primeiro:

"automóveis e"automóvel"

Uma vez que as duas são iguais, o carácter de pontuação (') está incluído na comparação. A primeira cadeia contém caracteres de pontuação, enquanto que a segunda cadeia não. Assim, "carro" é maior que "automóvel". Do mesmo modo, é maior que "carps" "carro" mas aqui do SQL Server não conta para o carácter de pontuação sequer uma vez que os caracteres de alfabeto normal já são diferentes:

"automóvel" é maior que "carps"

Este comportamento é o mesmo que a rotina de comparação de "palavra ordenação" no Windows NT e ocorre por predefinição.

Como contornar

Para contornar este comportamento, utilize um agrupamento de comparação binária. Por exemplo, utilize agrupamento Latin1_General_Bin. Em seguida, na cláusula ORDER BY molde o campo a função minúsculas ou maiúsculas. Utilização da função minúsculas ou maiúsculas permite uma ordenação binária dos caracteres apóstrofo e o hífen numa ordem alfabética/dicionário de caracteres, mantendo a minúsculas no conjunto de resultados.

Por exemplo:
CREATE TABLE t1 (c1 varchar (10) COLLATE Latin1_General_Bin NULL )
GO
INSERT INTO t1 VALUES ('CARs')
INSERT INTO t1 VALUES ('car''s')
INSERT INTO t1 VALUES ('carps')
GO
SELECT * FROM t1 ORDER BY LOWER(c1) ASC
				
aqui é o resultado:
c1         
---------- 
car's
car-s
cars
CARs

(4 row(s) affected)
				

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbprb KB305704 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 305704  (http://support.microsoft.com/kb/305704/en-us/ )