Ja, om din Oracle-databas skapas med en Unicode-teckenuppsättning, en NVARCHAR
i SQL Server bör migreras till en VARCHAR2
i Oracle. I Oracle, NVARCHAR
datatypen finns för att tillåta applikationer att lagra data med hjälp av en Unicode-teckenuppsättning när databasens teckenuppsättning inte stöder Unicode.
En sak att vara medveten om vid migrering är dock teckenlängdssemantik. I SQL Server, en NVARCHAR(20)
tilldelar utrymme för 20 tecken vilket kräver upp till 40 byte i UCS-2. I Oracle, som standard, en VARCHAR2(20)
tilldelar 20 byte lagring. I AL32UTF8
teckenuppsättning, som potentiellt bara räcker med utrymme för 6 tecken men troligen kommer den att hantera mycket mer (ett enda tecken i AL32UTF8
kräver mellan 1 och 3 byte. Du vill förmodligen deklarera dina Oracle-typer som VARCHAR2(20 CHAR)
vilket indikerar att du vill tilldela utrymme för 20 tecken oavsett hur många byte som krävs. Det brukar vara mycket lättare att kommunicera än att försöka förklara varför vissa 20 teckensträngar är tillåtna medan andra 10 teckensträngar avvisas.
Du kan ändra standardlängdsemantiken på sessionsnivå så att alla tabeller du skapar utan att ange någon längdsemantik kommer att använda tecken snarare än bytesemantik
ALTER SESSION SET nls_length_semantics=CHAR;
Det låter dig undvika att skriva CHAR
varje gång du definierar en ny kolumn. Det är också möjligt att ställa in det på systemnivå men att göra det avskräcks av NLS-teamet - uppenbarligen har inte alla skript Oracle tillhandahåller testats noggrant mot databaser där NLS_LENGTH_SEMANTICS
har ändrats. Och förmodligen har väldigt få tredjepartsskript varit det.