SQL – server-nvarchar naar varchar naar nvarchar karakters conversie
Nee, er is geen manier om de gegevens te “repareren” omdat de gegevens er niet meer zijn. Wanneer u converteerde naar VARCHAR
, werden de onderliggende waarden voor elk teken gewijzigd in de ASCII-waarde voor ?
. Dit is geen display probleem, die karakters zijn nu fysiek een regelmatig vraagteken. U moet een herstel doen vanaf een back-up, helaas.
de volgende voorbeeldcode laat zien dat zodra een Unicode-teken wordt geconverteerd naar VARCHAR
(aangenomen dat de codepagina die wordt aangeduid met de collatie dat teken niet ondersteunt), dat het een regelmatig vraagteken wordt, en dat het voor altijd zo zal blijven:
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
het volgende voorbeeld toont een exemplaar van een Unicode-teken dat zeer twijfelachtig is (in ieder geval op dit moment) om in de meeste lettertypen te worden ondersteund, vandaar dat het verschijnt als een vierkant kader, maar de UNICODE
built-n functie laat zien dat de onderliggende code nog steeds het juiste Unicode-codepunt is:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
het eigenlijke teken is hier te zien: Cherokee kleine Letter YA u+ABBF. Dit is een display probleem, en veel karakters die niet in verschillende lettertypen worden weergegeven op dezelfde manier zonder dat de werkelijke waarde van het teken, maar ze zijn nog steeds verschillende karakters.