Il semblerait qu'Oracle ait prévu à un moment donné de donner une définition différente à VARCHAR qu'à VARCHAR2 . Il l'a dit aux clients et déconseille d'utiliser VARCHAR . Quels que soient leurs plans, au 11.2.0.2 VARCHAR est identique à VARCHAR2 . Voici ce que dit la référence de langage SQL 11g version 2 :
N'utilisez pas le type de données VARCHAR. Utilisez plutôt le type de données VARCHAR2. Bien que le type de données VARCHAR soit actuellement synonyme de VARCHAR2, le type de données VARCHAR doit être redéfini en tant que type de données distinct utilisé pour les chaînes de caractères de longueur variable par rapport à différentes sémantiques de comparaison.
Actuellement, VARCHAR est synonyme de VARCHAR2. Cependant, dans les futures versions de PL / SQL, pour s'adapter aux nouvelles normes SQL, VARCHAR pourrait devenir un type de données distinct avec une sémantique de comparaison différente. C'est une bonne idée d'utiliser VARCHAR2 plutôt que VARCHAR.
Le type de données VARCHAR est synonyme du type de données VARCHAR2. Pour éviter d'éventuels changements de comportement, utilisez toujours le type de données VARCHAR2 pour stocker des chaînes de caractères de longueur variable.
La documentation d'Oracle 9.2 et 8.1.7 dit essentiellement la même chose, donc même si Oracle décourage continuellement l'utilisation de VARCHAR , jusqu'à présent, ils n'ont rien fait pour changer sa parité avec VARCHAR2 .
Il semble qu'à un certain moment avant 8i, la définition ait pu être différente.
Leigh Riffel
varcharAvant, je pensais qu'il y avait une limite de longueur différente avant la version 8, mais je ne trouve rien de fiable pour sauvegarder cela et je me demande maintenant si ce n'est qu'un mythe.
Jack Douglas
@Jack Douglas - Je ne trouve rien dans la documentation d'Oracle 7 à ce sujet. From docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Server >> Concepts du serveur >> Les types de données Oracle (ne peuvent pas y lier directement) disent à peu près la même chose que plus tard versions. Dans une autre section de la documentation de la version 7, il est dit que dans la version 6, Varchar et Varchar2 étaient synonymes de char.
Leigh Riffel
25
Actuellement, les deux sont synonymes.
VARCHAR est un type de données standard ANSI mais la mise en œuvre d'Oracle du type de données VARCHAR viole la norme ANSI en considérant la chaîne vide comme NULL (la mise en œuvre d'Oracle est antérieure à la norme ANSI). Comme le souligne Leigh, Oracle a déclaré que la sémantique du type de données VARCHAR pourrait changer à l'avenir en ce qui concerne le traitement de la chaîne vide. Si et quand cela se produit, la sémantique du type de données VARCHAR2 restera la même. L'utilisation du type de données VARCHAR2 est plus sûre car vous n'avez pas à vous inquiéter qu'une future version d'Oracle casse votre code en faisant en sorte que les chaînes vides ne soient plus considérées comme NULL.
Cela donne espoir de voir Oracle varchar3 (max) dans quelques années.
bernd_k
Sql-server n'a eu aucun problème à augmenter la longueur autorisée de 255 à 8000 (et maintenant même au maximum). Pourquoi Oracle avait-il besoin d'un type de données différent.
bernd_k
1
Il n'y a pas besoin d'un varchar(max), utilisez simplement unCLOB
varchar
Avant, je pensais qu'il y avait une limite de longueur différente avant la version 8, mais je ne trouve rien de fiable pour sauvegarder cela et je me demande maintenant si ce n'est qu'un mythe.Actuellement, les deux sont synonymes.
VARCHAR est un type de données standard ANSI mais la mise en œuvre d'Oracle du type de données VARCHAR viole la norme ANSI en considérant la chaîne vide comme NULL (la mise en œuvre d'Oracle est antérieure à la norme ANSI). Comme le souligne Leigh, Oracle a déclaré que la sémantique du type de données VARCHAR pourrait changer à l'avenir en ce qui concerne le traitement de la chaîne vide. Si et quand cela se produit, la sémantique du type de données VARCHAR2 restera la même. L'utilisation du type de données VARCHAR2 est plus sûre car vous n'avez pas à vous inquiéter qu'une future version d'Oracle casse votre code en faisant en sorte que les chaînes vides ne soient plus considérées comme NULL.
la source
Parce que dans la norme SQL d'origine, un VARCHAR était de 255 caractères, et Oracle avait au moins un essai de conformité aux normes à cette époque.
la source
varchar(max)
, utilisez simplement unCLOB