Załóżmy, że zestaw znaków bazy danych to UTF-8, który jest zalecanym ustawieniem w najnowszych wersjach Oracle. W takim przypadku niektóre znaki wymagają więcej niż jednego bajtu do zapisania w bazie danych.
Jeśli zdefiniujesz pole jako , Oracle może użyć do 11 bajtów do przechowywania, ale możesz nie być w stanie zapisać 11 znaków w polu, ponieważ niektóre z nich wymagają więcej niż jednego bajtu do zapisania, np. znaki spoza alfabetu angielskiego.
Definiując pole jako VARCHAR2(11 CHAR)
, możesz powiedzieć Oracle, że może użyć wystarczająco dużo miejsca do przechowywania 11 znaków, bez względu na to, ile bajtów potrzeba, aby je zapisać. Pojedyncza postać może wymagać do 4 bajtów.
Należy zauważyć, że semantyka długości znaków nie wpływa na maksymalną długość 4000 bajtów dla 'VARCHAR2'. Zgłoszenie "VARCHAR2 (4000 CHAR)" spowoduje mniej niż 4000 znaków, jeśli niektóre znaki wymagają wielu bajtów pamięci. –
@ David Sykes Czy to jest semantycznie takie samo z NVARCHAR (11)? – Nap
@Nap Nie tak daleko, jak wiem. Uważam, że parametr wielkości w deklaracji typu NVARCHAR ma znaczenie jak w VARCHAR2. tj. aby zapewnić wystarczającą ilość miejsca na 11 znaków (nie bajtów) w zestawie znaków NVARCHAR, powiedziałbyś NVARCHAR (11 CHAR). UWAGA: Nie sprawdziłem tego. Nigdy nie używałem NVARCHAR. –