Parece que a Oracle já planejou dar uma definição diferente ao VARCHAR e ao VARCHAR2 . Ele informou isso aos clientes e recomenda não usar o VARCHAR . Quaisquer que fossem seus planos, a partir do 11.2.0.2, o VARCHAR é idêntico ao VARCHAR2 . Aqui está o que o SQL Language Reference 11g Release 2 diz:
Não use o tipo de dados VARCHAR. Use o tipo de dados VARCHAR2. Embora o tipo de dados VARCHAR atualmente seja sinônimo de VARCHAR2, o tipo de dados VARCHAR está programado para ser redefinido como um tipo de dados separado usado para cadeias de caracteres de tamanho variável em comparação com diferentes semânticas de comparação.
Atualmente, VARCHAR é sinônimo de VARCHAR2. No entanto, em versões futuras do PL / SQL, para acomodar os padrões SQL emergentes, o VARCHAR pode se tornar um tipo de dados separado com diferentes semânticas de comparação. É uma boa ideia usar o VARCHAR2 em vez do VARCHAR.
O tipo de dados VARCHAR é sinônimo do tipo de dados VARCHAR2. Para evitar possíveis alterações no comportamento, sempre use o tipo de dados VARCHAR2 para armazenar cadeias de caracteres de comprimento variável.
A documentação do Oracle 9.2 e 8.1.7 diz essencialmente a mesma coisa, embora a Oracle desencoraje continuamente o uso do VARCHAR , até agora eles não fizeram nada para mudar sua paridade com o VARCHAR2 .
Há indicações de que em algum momento antes de 8i a definição pode ter sido diferente.
Leigh Riffel
Eu costumava pensar que havia um limite de comprimento diferente varcharantes da versão 8, mas não consigo encontrar nada respeitável para apoiar isso e agora me pergunto se é apenas um mito.
Jack Douglas
@ Jack Douglas - Não consigo encontrar nada na documentação do Oracle 7 sobre isso. Em docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Server >> Conceitos de servidor >> Tipos de dados Oracle (não é possível vincular diretamente a ele) diz praticamente a mesma coisa mais tarde versões. Em outra seção da documentação da versão 7, diz que na versão 6 Varchar e Varchar2 eram sinônimos de char.
Leigh Riffel
25
Atualmente, os dois são sinônimos.
VARCHAR é um tipo de dados padrão ANSI, mas a implementação do tipo de dados VARCHAR pela Oracle viola o padrão ANSI, considerando que a sequência vazia é NULL (a implementação da Oracle é anterior ao padrão ANSI). Como salienta Leigh, a Oracle afirmou que a semântica do tipo de dados VARCHAR pode mudar no futuro em relação à forma como a cadeia vazia é tratada. Se e quando isso acontecer, a semântica do tipo de dados VARCHAR2 permanecerá a mesma. O uso do tipo de dados VARCHAR2 é mais seguro, pois você não precisa se preocupar com o fato de que alguma versão futura do Oracle interrompa seu código, fazendo com que cadeias vazias não sejam mais consideradas NULL.
Isso dá esperança de ver o Oracle varchar3 (máximo) em alguns anos.
18711 bernd_k
O Sql-server não teve problemas para aumentar o comprimento permitido de 255 para 8000 (e agora até o máximo). Por que a Oracle precisava de um tipo de dados diferente.
18711 bernd_k
1
Não há necessidade de a varchar(max), basta usar aCLOB
varchar
antes da versão 8, mas não consigo encontrar nada respeitável para apoiar isso e agora me pergunto se é apenas um mito.Atualmente, os dois são sinônimos.
VARCHAR é um tipo de dados padrão ANSI, mas a implementação do tipo de dados VARCHAR pela Oracle viola o padrão ANSI, considerando que a sequência vazia é NULL (a implementação da Oracle é anterior ao padrão ANSI). Como salienta Leigh, a Oracle afirmou que a semântica do tipo de dados VARCHAR pode mudar no futuro em relação à forma como a cadeia vazia é tratada. Se e quando isso acontecer, a semântica do tipo de dados VARCHAR2 permanecerá a mesma. O uso do tipo de dados VARCHAR2 é mais seguro, pois você não precisa se preocupar com o fato de que alguma versão futura do Oracle interrompa seu código, fazendo com que cadeias vazias não sejam mais consideradas NULL.
fonte
Como no padrão SQL original, um VARCHAR tinha 255 caracteres e a Oracle tinha pelo menos uma facada na conformidade com os padrões naqueles dias.
fonte
varchar(max)
, basta usar aCLOB