Załóżmy, że zestaw znaków bazy danych to UTF-8, co jest zalecanym ustawieniem w najnowszych wersjach Oracle. W takim przypadku, niektóre znaki wymagają więcej niż 1 bajtu do zapisania w bazie danych.
Jeśli zdefiniujesz pole jako VARCHAR2(11 BYTE)
, Oracle może używać do 11 bajtów do przechowywania, ale w rzeczywistości może nie być możliwe przechowywanie 11 znaków w polu, ponieważ niektóre z nich zajmują więcej niż jeden bajt, np. znaki inne niż angielskie.
Definiując pole jako VARCHAR2(11 CHAR)
mówisz Oracle, że może użyć wystarczająco dużo miejsca, aby przechować 11 znaków, bez względu na to, ile bajtów potrzeba do przechowania każdego z nich. Pojedynczy znak może wymagać do 4 bajtów.