Sql – server-Nvarchar till varchar till nvarchar teckenkonvertering
Nej, det finns inget sätt att ”fixa” data eftersom data inte längre finns där. När du konverterade till VARCHAR
ändrades de underliggande värdena för varje tecken till ASCII-värdet för ?
. Detta är inte ett visningsproblem, dessa tecken är nu fysiskt ett vanligt frågetecken. Du måste göra en återställning från en säkerhetskopia, tyvärr.
följande exempelkod visar att när ett Unicode-tecken konverteras till VARCHAR
(förutsatt att kodsidan betecknad med sorteringen inte stöder det tecknet), att det blir ett vanligt ’ ol-frågetecken, och för alltid ska det förbli som sådant:
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
följande exempel visar en instans av ett Unicode-tecken som är mycket tveksamt (åtminstone vid denna tidpunkt) att stödjas i de flesta teckensnitt, därför visas det som en fyrkantig ruta, men funktionen UNICODE
inbyggd n visar att den underliggande koden fortfarande är rätt Unicode-kodpunkt:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
det faktiska tecknet kan ses här: Cherokee liten bokstav YA u+ABBF. Detta är ett visningsproblem, och många tecken som inte är representerade i olika teckensnitt visas på samma sätt utan att ändra karaktärens faktiska värde, men de är fortfarande distinkta tecken.