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.