Sql-server-nvarchar to varchar to nvarchar characters conversion
Ne, neexistuje způsob, jak“ opravit “ data, protože data již neexistují. Při převodu na VARCHAR
byly základní hodnoty pro každý znak změněny na hodnotu ASCII pro ?
. Nejedná se o problém zobrazení, Tyto znaky jsou nyní fyzicky běžným otazníkem. Budete muset provést obnovení ze zálohy, bohužel.
následující příklad ukazuje, že jakmile je znak Unicode převeden na VARCHAR
(za předpokladu, že kódová stránka označená kombinací tento znak nepodporuje), stane se regulárním otazníkem a navždy zůstane jako takový:
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
následující příklad ukazuje instanci znaku Unicode, který je velmi pochybný (alespoň v tomto okamžiku), který má být podporován ve většině písem, proto se jeví jako čtvercový rámeček, ale funkce UNICODE
built-n ukazuje, že základní kód je stále správný kódový bod Unicode:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
skutečný znak lze vidět zde: Cherokee malé písmeno YA u+ABBF. Jedná se o problém se zobrazením a mnoho znaků, které nejsou zastoupeny v různých písmech, se zobrazí stejným způsobem, aniž by se změnila skutečná hodnota znaku, ale stále se jedná o odlišné znaky.