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.