Казалось бы, в свое время Oracle планировал дать другое определение VARCHAR, чем VARCHAR2 . Он сказал клиентам об этом и рекомендует не использовать VARCHAR . Какими бы ни были их планы, по состоянию на 11.2.0.2 VARCHAR идентичен VARCHAR2 . Вот что говорит Справочник по языку SQL 11g Release 2 :
Не используйте тип данных VARCHAR. Вместо этого используйте тип данных VARCHAR2. Хотя тип данных VARCHAR в настоящее время синонимичен с VARCHAR2, тип данных VARCHAR планируется переопределить как отдельный тип данных, используемый для символьных строк переменной длины, по сравнению с другой семантикой сравнения.
В настоящее время VARCHAR является синонимом VARCHAR2. Однако в будущих выпусках PL / SQL, чтобы соответствовать новым стандартам SQL, VARCHAR может стать отдельным типом данных с другой семантикой сравнения. Это хорошая идея, чтобы использовать VARCHAR2, а не VARCHAR.
Тип данных VARCHAR является синонимом типа данных VARCHAR2. Чтобы избежать возможных изменений в поведении, всегда используйте тип данных VARCHAR2 для хранения символьных строк переменной длины.
Документация по Oracle 9.2 и 8.1.7 говорит, по сути, об одном и том же, поэтому, несмотря на то, что Oracle постоянно не рекомендует использовать VARCHAR , до сих пор они не сделали ничего, чтобы изменить его соотношение с VARCHAR2 .
Есть признаки того, что в некоторый момент до 8i определение могло быть другим.
Ли Риффель
Раньше я думал, что varcharдо версии 8 было другое ограничение длины , но я не могу найти ничего заслуживающего доверия, чтобы поддержать это, и теперь задаюсь вопросом, не является ли это просто мифом.
Джек Дуглас
@ Джек Дуглас - я не могу найти ничего в документации по Oracle 7 по этому поводу. От docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Сервер Oracle 7 >> Концепции сервера >> Типы данных Oracle (не может напрямую ссылаться на него) говорит о том же, что и позже версии. В другом разделе документации версии 7 говорится, что в версии 6 Varchar и Varchar2 были синонимами для char.
Ли Риффель
25
В настоящее время оба являются синонимами.
VARCHAR является стандартным типом данных ANSI, но реализация Oracle типа данных VARCHAR нарушает стандарт ANSI, считая пустую строку NULL (реализация Oracle предшествует стандарту ANSI). Как указывает Ли, Oracle заявил, что семантика типа данных VARCHAR в будущем может измениться в зависимости от того, как обрабатывается пустая строка. Если и когда это произойдет, семантика типа данных VARCHAR2 останется прежней. Использование типа данных VARCHAR2 более безопасно, потому что вам не нужно беспокоиться о том, что какая-то будущая версия Oracle сломает ваш код, в результате чего пустые строки больше не будут рассматриваться как NULL.
varchar
до версии 8 было другое ограничение длины , но я не могу найти ничего заслуживающего доверия, чтобы поддержать это, и теперь задаюсь вопросом, не является ли это просто мифом.В настоящее время оба являются синонимами.
VARCHAR является стандартным типом данных ANSI, но реализация Oracle типа данных VARCHAR нарушает стандарт ANSI, считая пустую строку NULL (реализация Oracle предшествует стандарту ANSI). Как указывает Ли, Oracle заявил, что семантика типа данных VARCHAR в будущем может измениться в зависимости от того, как обрабатывается пустая строка. Если и когда это произойдет, семантика типа данных VARCHAR2 останется прежней. Использование типа данных VARCHAR2 более безопасно, потому что вам не нужно беспокоиться о том, что какая-то будущая версия Oracle сломает ваш код, в результате чего пустые строки больше не будут рассматриваться как NULL.
источник
Потому что в исходном стандарте SQL VARCHAR состоял из 255 символов, и Oracle в те дни, по крайней мере, добивался соответствия стандартам.
источник
varchar(max)
, просто используйтеCLOB