február 7, 2022

Sql-server – Nvarchar to varchar to Nvarchar characters conversion

nem, nincs mód az adatok “javítására”, mert az adatok már nincsenek ott. Amikor VARCHAR értékre konvertálta, az egyes karakterek mögöttes értékei ?ASCII értékre módosultak. Ez nem megjelenítési probléma, ezek a karakterek fizikailag rendszeres kérdőjel. Sajnos vissza kell állítania egy biztonsági másolatot.

a következő példakód azt mutatja, hogy ha egy Unicode karakter átalakul VARCHAR – re (feltételezve, hogy az összevetés által jelölt kódlap nem támogatja ezt a karaktert), akkor szabályos ‘ ol kérdőjel lesz, és örökre megmarad:

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

a következő példa egy Unicode karakter egy példányát mutatja, amely erősen kétséges (legalábbis ebben az időben), hogy a legtöbb betűtípusban támogatott legyen, ezért négyzet alakú mezőként jelenik meg, de a UNICODE beépített n függvény azt mutatja, hogy az alapul szolgáló kód továbbra is a megfelelő Unicode kódpont:

SELECT NCHAR(0xABBF), N'ꮿ', UNICODE(N'ꮿ');-- ꮿ ꮿ 43967

a tényleges karakter itt látható: Cherokee kis betű YA U+ABBF. Ez egy megjelenítési probléma, és sok olyan karakter, amely nem jelenik meg különböző betűtípusokban, ugyanúgy jelenik meg, anélkül, hogy megváltoztatná a karakter tényleges értékét, de még mindig különálló karakterek.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.