7 lutego, 2022

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 VARCHARwartoś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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.