SQL – server-nvarchar do VARCHAR do nvarchar konwersja znaków
Nie, Nie ma sposobu na „poprawienie” danych, ponieważ danych już nie ma. Podczas konwersji na VARCHAR
wartości bazowe dla każdego znaku zostały zmienione na wartość ASCII dla ?
. Nie jest to problem wyświetlania, znaki te są teraz fizycznie zwykłym znakiem zapytania. Niestety trzeba będzie wykonać przywracanie z kopii zapasowej.
poniższy przykładowy kod pokazuje, że gdy znak Unicode zostanie skonwertowany na VARCHAR
(zakładając, że strona kodowa oznaczona kolacją nie obsługuje tego znaku), staje się on regularnym znakiem zapytania ’ ol i na zawsze pozostanie takim znakiem:
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
poniższy przykład pokazuje wystąpienie znaku Unicode, który jest wysoce wątpliwy (przynajmniej w tej chwili), aby był obsługiwany w większości czcionek, dlatego pojawia się jako kwadratowe pole, ale wbudowana funkcja UNICODE
pokazuje, że kod bazowy jest nadal prawidłowym punktem kodu Unicode:
SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967
rzeczywisty znak można zobaczyć tutaj: Cherokee Small Letter YA U+ABBF. Jest to problem z wyświetlaniem, a wiele znaków, które nie są reprezentowane w różnych czcionkach, wyświetli się w ten sam sposób bez zmiany rzeczywistej wartości znaku, ale nadal są to odrębne znaki.