Fevereiro 7, 2022

Sql-server – Nvarchar para varchar, nvarchar caracteres de conversão

Não, não há nenhuma maneira para “corrigir” os dados, porque os dados não estão mais lá. Quando você converteu para VARCHAR, os valores subjacentes para cada caractere foram alterados para o valor ASCII para ?. Este não é um problema de exibição, esses personagens agora são fisicamente um ponto de interrogação regular. Você precisará fazer uma restauração a partir de um backup, infelizmente.

O seguinte código de exemplo mostra que uma vez que um caractere Unicode é convertido para VARCHAR (supondo que a Página de Código indicado pelo Agrupamento não suporta que o personagem), que torna-se um regular ‘ol ponto de interrogação, e sempre deve permanecer como tal:

DECLARE @Character NCHAR(1) = NCHAR(0x3525);SELECT @Character AS , UNICODE(@Character) AS , ASCII(@Character) AS , UNICODE(CONVERT(VARCHAR(5), @Character)) AS , UNICODE(CONVERT(NVARCHAR(5), CONVERT(VARCHAR(5), @Character))) AS , ASCII('?') AS , UNICODE(N'?') AS ;-- 㔥 13605 63 63 63 63 63

O exemplo a seguir mostra um exemplo de um caractere Unicode que é altamente duvidoso (pelo menos neste momento), a ser suportado na maioria das fontes, por isso, aparece como uma caixa quadrada, mas o UNICODE construído-função n mostra que o código subjacente ainda é o correto Ponto de Código Unicode:

SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967

o personagem real pode ser visto aqui: Cherokee pequena letra YA U + ABBF. Este é um problema de exibição, e muitos caracteres que não são representados em várias fontes serão exibidos da mesma maneira sem alterar o valor real do caractere, mas ainda são caracteres distintos.

Deixe uma resposta

O seu endereço de email não será publicado.