A que "regra VARCHAR(255)" você está se referindo?
Cada fornecedor de banco de dados é livre para implementar o VARCHAR como quiser. As regras (e diretrizes) para VARCHAR não serão necessariamente as mesmas para todos os bancos de dados.
Quanto ao padrão SQL, eu realmente não olhei para ele. Pode ser bastante solto, então todas as implementações VARCHAR são encontradas em conformidade com o padrão. Se o padrão SQL para VARCHAR for realmente rigoroso, os fornecedores de DBMS podem estender o padrão ou simplesmente não estar em conformidade. Eu não acho que o padrão real importa muito. O que importa são as regras reais impostas pelo SGBD.
Como uma diretriz geral, especifique um comprimento VARCHAR longo o suficiente para suportar os requisitos do sistema. Se o requisito do sistema for permitir no máximo 200 caracteres, então eu especificaria o comprimento como
VARCHAR(200)
. Como outra diretriz geral, não defina comprimentos de VARCHAR que sejam maiores do que precisam ser. As colunas VARCHAR declaradas por mais tempo do que o necessário podem afetar os recursos e o desempenho.
O limite do Oracle para o comprimento VARCHAR é de 4.000 caracteres. (Nas versões anteriores do Oracle, o máximo era 2.000. Se você precisar de mais de 4.000 caracteres, poderá usar
CLOB
tipo de dados. Limite do SQL Server para
VARCHAR(8000)
, a menos que você especifique VARCHAR(MAX)
que permite um tamanho máximo (em bytes) de 2^32-1. O MySQL tem um limite de 65.535 para o limite máximo de comprimento de linha. Portanto, isso limita efetivamente o tamanho de VARCHAR para VARCHAR(21844), se estiver usando um conjunto de caracteres multibyte como utf8. Com um conjunto de caracteres de um único byte (como latin1), o máximo seria VARCHAR(65532). Se você precisar de mais caracteres do que isso ou atingir o limite do comprimento máximo da linha, poderá usar o tipo de dados TEXT em vez de VARCHAR.
A maioria das implementações DBMS VARCHAR armazenam um campo "comprimento" para uma coluna VARCHAR, junto com o valor. o comprimento é armazenado como um inteiro.
Em alguns DBMS, se o comprimento máximo (em bytes) de uma coluna VARCHAR não exceder 255 bytes, o campo de comprimento pode ser implementado como um inteiro de byte único. Se a coluna permitir mais de 255 bytes, o campo de comprimento deverá ser maior que um único byte.
Com formatos de linha dinâmicos, em termos de armazenamento de linha, armazenando 10 caracteres em uma coluna, não importa se a coluna é definida como VARCHAR(30) ou VARCHAR(1000). Com formatos de linha fixos, o espaço para o comprimento máximo da coluna será reservado. O formato para storags de linha dependerá do DBMS e, em alguns casos (MySQL), do mecanismo de armazenamento e do formato de linha especificado.
Sim, estamos em 2016. E percorremos um longo caminho desde a introdução do primeiro sistema de banco de dados relacional comercial.
O banco de dados é apenas uma parte do sistema. Pode haver limites no aplicativo ou em outros componentes de software. (Se a aplicação for escrita em C, e a aplicação estiver definindo uma estrutura com uma matriz de bytes para o campo, o limite do tamanho será importante. Aumentar o tamanho permitido no banco de dados não corrigirá automaticamente a aplicação .
Também pode haver limites/restrições de comprimento no código Javascript ou nos elementos HTML de uma página da web. Ou pode haver limitações de outros componentes de software. Por exemplo, alguns dos drivers ODBC do SQL Server realmente antigos têm um limite de 255 caracteres (bytes?) para colunas CHAR e VARCHAR.
Portanto, o comprimento de um VARCHAR no banco de dados é apenas parte da história.
Com tudo isso dito, ainda não entendi o que você quer dizer, quando pergunta
Podemos quebrar a regra VARCHAR(255)?
Gostaria de saber a que "regra" você se refere. Na maioria dos bancos de dados que conheço, é possível definir colunas VARCHAR com muito mais de 255 bytes ou 255 caracteres. E fazer isso não quebra nenhuma regra.