Före Oracle 12.1, en VARCHAR2
kolumnen är begränsad till att lagra 4000 byte data i databasens teckenuppsättning även om den deklareras VARCHAR2(4000 CHAR)
. Eftersom varje tecken i din sträng kräver 2 byte lagring i teckenuppsättningen UTF-8, kommer du inte att kunna lagra mer än 2000 tecken i kolumnen. Naturligtvis kommer den siffran att ändras om några av dina karaktärer faktiskt bara kräver 1 byte lagringsutrymme eller om några av dem kräver mer än 2 byte lagring. När databasteckenuppsättningen är Windows-1252 kräver varje tecken i din sträng bara en enda byte lagring så att du kan lagra 4000 tecken i kolumnen.
Eftersom du har längre strängar, skulle det vara möjligt att deklarera kolumnen som en CLOB
snarare än som en VARCHAR2
? Det skulle (effektivt) ta bort längdbegränsningen (det finns en gräns för storleken på en CLOB
det beror på Oracle-versionen och blockstorleken, men det är åtminstone i intervallet flera GB).
Om du råkar använda Oracle 12.1 eller senare kan max_string_size
parametern låter dig öka den maximala storleken på en VARCHAR2
kolumn från 4000 byte till 32767 byte
.