O datatype varchar considera caracteres não-UNICODE, o nvarchar, ao contrário, trabalha com caracteres UNICODE. O que você tem que levar em consideração é a quantidade armazenada por cada tipo de dado. O VARCHAR irá armazenar a quantidade informada, acrescida de 2bytes.
Char é usado para armazenar uma string com um comprimento fixo, enquanto o varchar é usado para armazenar cordas com um comprimento variável. Para obter um melhor desempenho a partir dos dados, é mais importante escolher os tipos de dados corretos para os campos das tabelas em seu banco de dados.
Use varchar(max) quando os tamanhos das entradas de dados de coluna variarem consideravelmente e o tamanho da cadeia de caracteres puder exceder 8.000 bytes.
Já o VARCHAR deve ser utilizado quando não sabemos o que vamos armazenar. Um exemplo pode ser o nome do cliente, endereço, o email que sempre variam de tamanho.
max indica que o tamanho de armazenamento máximo é de 2^31-1 caracteres (2 GB). O tamanho do armazenamento é duas vezes n bytes + 2 bytes. Para a codificação UCS-2, o tamanho de armazenamento é duas vezes n bytes + 2 bytes e a quantidade de caracteres que pode ser armazenada também é n.
VARCHAR e VARCHAR2 tem o mesmo comportamento mas a Oracle sugere que não usemos o VARCHAR porque reservaram a palavra-chave para uso futuro. VARCHAR2 é usado para armazenar variáveis texto de tamanho variável. O texto informado no campo ocupa apenas o espaço do seu tamanho.
O VARCHAR por definição tem tamanho variável, mas não se pode colocar o tamanho que desejar ali, como respondido acima. Esse 255 é o tamanho máximo permitido para a coluna, que no caso do Oracle, o máximo possível é 4000. De fato, ele só utiliza o que for necessário.
MySQL, SQL Server, Oracle, podem ter diferenças, melhor é ler a documentação de cada um, ou no caso leia a do que você está utilizando. Resumidamente de forma genérica: Se você vai guardar até 4048 caracteres, pode usar varchar. Se vai ter mais que isso, use text.
A diferença entre eles é que enquanto o CHAR suporta tamanhos fixos de caracteres, o VARCHAR por sua vez suporta caracteres de tamanhos variáveis. Então, por exemplo, se declararmos um CHAR de tamanho 100 e preenchemos apenas 40 caracteres, o restante será preenchido com espaços em branco até totalizar o tamanho 100.
VARCHAR é equivalente a CHARACTER VARYING. CLOB é equivalente a CHARACTER LARGE OBJECT. BLOB é equivalente a BINARY LARGE OBJECT. INT é equivalente a INTEGER.
nchar e nvarchar armazenam caracteres em Unicode. char e varchar não armazenam caracteres em Unicode. char e nchar são de tamanho fixo. Isso quer dizer que esse tipo de dados usa o espaço que você especificar para ele, mesmo que você não utilize tudo.
O conceito básico de chave de um BD é que é uma ou mais colunas que distiguem uma linha das demais dentro de uma tabela, sendo esta chamada de chave primária (PK – Primary Key) ou para relacionar com outra tabela, chamada de chave estrangeira (FK – Foreign Key).
CHAR retorna um valor de NULL para expressões de inteiro fora deste intervalo de entrada ou que não representa um caractere completo. CHAR também retorna um valor de NULL quando o caractere excede o comprimento do tipo de retorno.
O VARCHAR por definição tem tamanho variável, pode-se colocar o tamanho que desejar ali, pelo menos dentro do padrão ANSI. Esse 255 é apenas uma informação de como ele deve ser mostrado em uma seleção, não quer dizer que ela ocupará esse espaço em disco. Não há desperdício.
Quando você não tem tanto controle ou sabe que o tamanho será bem grande, ou seja, é um texto e não apenas uma simples string, tem que usar o TEXT mesmo, não tem jeito. O TEXT costuma ter acesso mais lento na maioria das situações.
O SQL Server apresenta um tipo de dado chamado TEXT, que, é um formato de campo texto longo que pode conter até 2.147.483.647 caracteres ou menos, a depender da cadeia de caracteres. Sabendo disso podemos utilizar este formato para armazenar textos longos.
É possível usar o comando ALTER da tabela para alterar o comprimento de uma coluna varchar. É possível aumentar o comprimento de uma coluna varchar para o tamanho máximo de 64.000.
SMALLINT: Um inteiro pequeno, de 0 a 65535 (UNSIGNED) ou -32768 até 32767. Ocupa 2 bytes. MEDIUMINT: Um inteiro de tamanho médio, de 0 a 16777215 (UNSIGNED) ou -8388608 a 8388607. Ocupa 3 bytes.
Uma variável do tipo char ocupa 1 byte (8 bits) e pode ser usada para armazenar um valor inteiro sem sinal (unsigned char) entre 0 e 255 ou um valor com sinal (char) entre –128 a 127. Pode ser usada tanto como um número ou como caractere.
Embora o comprimento máximo de um VARCHAR seja especificado em caracteres, um VARCHAR também é limitado a um número máximo de bytes (16.777.216 (16 MB)). O número máximo de caracteres Unicode que podem ser armazenados em uma coluna VARCHAR é mostrado abaixo: Um byte. 16.777.216.
O comando LIMIT tem a função de limitar as linhas que serão exibidas no resultado da query. No caso da query acima estamos indicando que retornem apenas duas linhas a partir da linha 4.