1
resposta

Collations SQL Server

Durante a prática dos execícios me deparei com o erro de collation.

Ao executar o comando:

SELECT B.[CODIGO DO PRODUTO], B.[PREÇO DE LISTA], A.[CÓDIGO], A.[PREÇO LISTA]
FROM [PRODUTOS] A INNER JOIN [SUCOS_VENDAS].[dbo].[TABELA DE PRODUTOS] B
ON A.[CÓDIGO] = B.[CODIGO DO PRODUTO]
WHERE A.[CÓDIGO] = '1000889'

Gerava o erro:

Msg 468, Level 16, State 9, Line 12
Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.

Isto é resultado da collation da base de dados SUCOS_VENDAS estar incomativél da base de dados VENDAS SUCOS.

Estou rodando o SQL Server 2017 em Docker e o SQL Management Studio no Windows, quando importei o backup ele considerou o padrão de collation da minha máquina Windows (PT-BR) e o banco de dados quando criado foi considerado a collation padrão do ambiente Docker (Linux - EN).

Para evitar este tipo de conflito entendo que deve sempre observar ao tipo de collation que está sendo utilizado na base de dados origem e destino.

1 resposta

Henrique

Exatamente. Quando você faz um JOIN entre tabelas de bancos de dados diferentes eles devem estar, obrigatoriamente com a mesma COLLATION. Isso porque cada COLLATION usa, internamente, uma tabela ASCII (uma aceita acentos, outras não, outras tem caracteres orientais, etc...). Na hora de fazer o JOIN entre dois strings a tabela interna ASCII deve ser igual para esta união funcionar.

Uma dica é ir nas propriedades de um dos bancos e configurar a COLLATION para a mesma que o do outro banco.

Att

Victorino.