Sql–Server – Nvarchar zu varchar zu nvarchar Zeichen Konvertierung
Nein, es gibt keine Möglichkeit, die Daten zu „reparieren“, da die Daten nicht mehr vorhanden sind. Bei der Konvertierung in VARCHAR
wurden die zugrunde liegenden Werte für jedes Zeichen in den ASCII-Wert für ?
geändert. Dies ist kein Anzeigeproblem, diese Zeichen sind jetzt physisch ein normales Fragezeichen. Sie müssen leider eine Wiederherstellung aus einem Backup durchführen.
Der folgende Beispielcode zeigt, dass ein Unicode-Zeichen, sobald es in VARCHAR
konvertiert wurde (vorausgesetzt, die mit der Sortierung bezeichnete Codepage unterstützt dieses Zeichen nicht), zu einem regulären ‚ol-Fragezeichen wird und für immer so bleiben soll:
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
Das folgende Beispiel zeigt eine Instanz eines Unicode-Zeichens, das (zumindest zu diesem Zeitpunkt) in den meisten Schriftarten sehr zweifelhaft ist, daher erscheint es als quadratisches Kästchen, aber die eingebaute UNICODE
-Funktion zeigt, dass Der zugrunde liegende Code ist immer noch der richtige Unicode-Codepunkt:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
Das eigentliche Zeichen ist hier zu sehen: Der Kleinbuchstabe YA U+ABBF. Dies ist ein Anzeigeproblem, und viele Zeichen, die nicht in verschiedenen Schriftarten dargestellt werden, werden auf dieselbe Weise angezeigt, ohne den tatsächlichen Wert des Zeichens zu ändern.