TEXT и VARCHAR

Добрый день!

Недавно в интернете наткнулся на интересные данные, что PostgreSQL для хранения типа TEXT создаёт отдельную таблицу...
Прочитав документацию так и не встретил ответа (возможно плохо прочитал :-( )

Есть ли существенная разница в скорости доступа и затратах памяти для хранения полей тип: TEXT и VARCHAR?
И какие преимущества в использовании того или иного строкового типа (ведь не зря же их 2!) ?

Заранее спасибо

P/S то что varchar позволяет ограничивать длину поля понятно, но интересует ситуация именно без ограничения...

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А мануал читать ломает?

Я, конечно, извиняюсь... Но в

Я, конечно, извиняюсь... Но в моём представлении фраза
"Прочитав документацию так и не встретил ответа" предполагает, что мануал я читал... Но раз отослали, сходим ещё... И вот что я нашёл:

"В дополнение, PostgreSQL предоставляет тип text, который хранит строки любой длины. Хотя тип text отсутствует в стандарте SQL, некоторые другие SQL СУБД также поддерживают его."

"Заметим, что конечные пробелы являются семантически значимыми в значениях character varying и text."

" Если вы желаете хранить строки без ограничения длины, то используйте тип text или тип character varying без указания длины, вместо того, чтобы точно указывать предельную длину)"

Странно, но в данном мане только о сходстве между text и varchar... Хотя различие в том, что text отсутствует в стандарте SQL. Правда я сомневаюсь, что text добавили просто для того, чтоб возможно он не поддерживался в других СУБД...

Прошу, если кто знает различие между text и varchar без ограничения длинны поделитесь... Заранее спасибо

> И вот что я нашёлЗначит

> И вот что я нашёл
Значит таки нашли? :) Значит не зря были посланы! Теперь смотрим вопросы вашего ПЕРВОГО поста и плавно берём ответы из мануала в котором "Прочитав документацию так и не встретил ответа" предполагает, что мануал я читал.."

> Недавно в интернете наткнулся на интересные данные, что PostgreSQL для хранения типа TEXT создаёт отдельную таблицу...

Длинные строки автоматически сжимаются системой, так что физически места на диске может потребоваться меньше. Очень длинные значения также хранятся в фоновых таблицах,

> Есть ли существенная разница в скорости доступа и затратах памяти для хранения полей тип: TEXT и VARCHAR?

Значения типа character физически дополняются пробелами до заданной длины n и хранятся и отображаются в этом виде. Однако, эти дополнительные пробелы считаются семантически неважными. При сравнении двух значений типа character конечные пробелы игнорируются и они будут удалены при преобразовании значений типа character в любые другие строковые типы. Заметим, что конечные пробелы являются семантически значимыми в значениях character varying и text.


Tip: С точки зрения производительности, разницы при работе СУБД с этими тремя типами нет, кроме увеличения размера хранения, при использовании типа с заполнением пробелами и несколькими дополнительными циклами процессора для проверки длины, когда происходит сохранение колонки ограниченной длины. Хотя в некоторых СУБД работа с типом character(n) более производительна, но в PostgreSQL этого нет; фактически character(n) обычно самый медленный из трёх, из-за дополнительных затрат на его хранение. В большинстве случаев вместо этого типа можно использовать типы text или character varying.

> И какие преимущества в использовании того или иного строкового типа (ведь не зря же их 2!) ?
А тут делаем логические выводы: наличие character(n) требует стандарт SQL. Как СУБД которая стремится соответствовать стандартам, PostgreSQL также предоставляет вам этот тип. Выше же написано, что "В большинстве случаев вместо этого типа можно использовать типы text или character varying"

Вот что Я ещё там начитал:
Если character varying используется без указания длины, то допускаются строки любой длины. Это является расширением PostgreSQL.
Вот вам и отличие. В других СУБД длина должна быть указана в отличие от TEXT

> Прошу, если кто знает различие между text и varchar без ограничения длинны поделитесь... Заранее спасибо
Судя по мануалу их нет. Вернее, всё отличие состоит в том, что тип varchar поддерживается SQL стандартом, а тип TEXT нет, хотя и присутствует в некоторых других СУБД.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023