Vamos supor que o conjunto de caracteres do banco de dados seja UTF-8, que é a configuração recomendada nas versões recentes do Oracle. Nesse caso, alguns caracteres levam mais de 1 byte para serem armazenados no banco de dados.
Se você definir o campo como
VARCHAR2(11 BYTE)
, o Oracle pode usar até 11 bytes para armazenamento, mas talvez você não consiga armazenar 11 caracteres no campo, porque alguns deles levam mais de um byte para armazenar, por exemplo, caracteres não ingleses. Ao definir o campo como
VARCHAR2(11 CHAR)
você diz ao Oracle que ele pode usar espaço suficiente para armazenar 11 caracteres, não importa quantos bytes sejam necessários para armazenar cada um. Um único caractere pode exigir até 4 bytes.