kvm-server – nvarchar til varchar til nvarchar tegn konvertering
Nej, der er ingen måde at “rette” dataene på, fordi dataene ikke længere er der. Når du konverterede til VARCHAR
, blev de underliggende værdier for hvert tegn ændret til ASCII-værdien for ?
. Dette er ikke et displayproblem, disse tegn er nu fysisk et almindeligt spørgsmålstegn. Du bliver nødt til at gøre en gendannelse fra en sikkerhedskopi, desværre.
følgende eksempelkode viser, at når et Unicode-tegn er konverteret til VARCHAR
(forudsat at kodesiden betegnet med sorteringen ikke understøtter dette tegn), at det bliver et almindeligt ‘ OL spørgsmålstegn, og for evigt skal det forblive som sådan:
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ølgende eksempel viser en forekomst af et Unicode-tegn, der er meget tvivlsomt (i det mindste på dette tidspunkt), der skal understøttes i de fleste skrifttyper, og derfor vises det som en firkantet boks, men UNICODE
indbygget n-funktion viser, at den underliggende kode stadig er det korrekte Unicode-kodepunkt:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
den faktiske karakter kan ses her: Cherokee lille bogstav YA U+ABBF. Dette er et displayproblem, og mange tegn, der ikke er repræsenteret i forskellige skrifttyper, vises på samme måde uden at ændre tegnets faktiske værdi, men de er stadig forskellige tegn.