sql >> Databasteknik >  >> RDS >> Oracle

Skillnad mellan NVARCHAR i Oracle och SQL Server?

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.




  1. JOIN mysql php-funktion istället för varje loop

  2. Hur man får poster från de senaste 30 dagarna

  3. Ta reda på om ett objekt är en tabellvärderad funktion i SQL Server med OBJECTPROPERTY()

  4. Hur man skapar Temp-tabell med SELECT * INTO tempTable FROM CTE Query