Ms sql получить размер строки varchar: Типы char и varchar (Transact-SQL) — SQL Server

Строковый тип данных в SQL

Строковый тип данных является наиболее используемым типом данных. Благодаря ему в базе данных хранятся как текстовые, так и различные двоичные данные (например, картинки).

В MySQL он представлен следующими типами:

ТипОписаниеДиапазон символов
CHAR(X)Содержит текстовые строки. Длина фиксируемая, её вы указываете при объявлении. В случае, если длина строки меньше указанной, она дополняются правыми пробелами до указанной длины.Длина может быть любой в диапазоне от 0 до 255
VARCHAR(X)Содержит текстовые строки. Длина строк динамическая.Длина может быть любой в диапазоне от 0 до 65,535

Типы данных BINARY и VARBINARY аналогичны VARCHAR и CHAR только они хранят двоичные строки.

ТипОписаниеДиапазон символов
BINARY(X)Содержит двоичные строки. Длина фиксируемая, её вы указываете при объявлении.Длина может быть любой в диапазоне от 0 до 255
VARBINARY(X)Содержит двоичные строки. Длина строк динамическая.Длина может быть любой в диапазоне от 0 до 65,535

BLOB используется для хранения больших бинарных данных, таких как картинки. TEXT предназначен также для хранения больших данных, но текстового содержания.

Разница между ними заключается в том, что сортировки и сравнения сохранённых данных у BLOB чувствительны к регистру и не чувствительны к регистру в полях TEXT.

ТипОписаниеДиапазон символов
BLOBСодержит двоичные строки.Максимальная длина 65,535
TEXTСодержит текстовые строки.Максимальная длина 65,535

BLOB и TEXT имеют дополнительные подтипы, которые отличаются максимальным размером данных, которые можно в них хранить.

ТипДиапазон символов
TINYBLOBМаксимальная длина 255
MEDIUMBLOBМаксимальная длина 16,777,215
LONGBLOBМаксимальная длина 4,294,967,295
TINYTEXTМаксимальная длина 255
MEDIUMTEXTМаксимальная длина 16,777,215
LONGTEXTМаксимальная длина 4,294,967,295

Выбор типа данных для строк/текста (char vs varchar vs text) — PostgreSQL Cook Book

В PostgreSQL есть три типа данных для хранения текстовой информации:

  • character(n), char(n) — текст фиксированной длины (строка всегда имеет строго заданный размер)
  • character varying(n), varchar(n) — текст с ограничением по длине (максимальная длина строка может быть ограничена)
  • text — текст неограниченной длины

Физически максимальный размер любых строк в PostgreSQL ограничен одним гигабайтом (1GB).

Примечание

Логическое ограничение на максимальный размер строки (char(n), varchar(n), где n — логическое ограничение),
задаваемое пользователем для конкретного поля,
лимитирует количество символов в строке, а не длину строки в байтах. Поэтому,
несмотря на физический лимит на максимальный размер строки в 1GB, реальное максимальное количество символов в строке может быть меньше, так
как различные кодировки символов могут использовать больше одного байта для представления одного символа.

CHAR(N)

Этот тип всегда имеет ограничение по длине. Даже, если длина не задана (char), то подразумевается, что она равна
единице, то есть char ~ char(1).

Тип имеет одну особенность, которая выделяет есть среди других текстовых типов.
Так как поля с этим типом имеют фиксированный размер (не больше / не меньше заданного),
то, при сохранении в таблицу у всех строк, длина которых меньше этого размера,
оставшееся пустое место в конце строки заполняется пробелами.
Поэтому при сохранении значения ‘123’ в поле с типом char(6) в таблицу реально сохранится ‘123___’. Это может стать
неприятным сюрпризом.

При операциях сравнения полей с типом char(n) пробелы в конце строки игнорируются.

denis=# SELECT '123   '::char(6) = '123';
 ?column?
----------
 t
(1 row)

VARCHAR

Тип без заданной длины интерпретируется PostgreSQL, как безразмерная строка эквивалентная типу text.
При попытке записать в текстовое поле ограниченной длины значение, которое превышает заданные размеры, генерируется ошибка.
Строка этого типа хранится в базе данных без изменений (в отличии от char(n)), поэтому нагрузка на процессор при обработке
varchar-строк немного меньше, чем при работе с char(n).

TEXT

Этот тип позволяет сохранять строки размером до одного гигабайта. Поэтому его часто используют для хранения текстов,
html-страниц и прочей тестовой информации размер которой превышает одну строку текста.

Предупреждение

Тип text является специфическим типом PostgreSQL, поэтому при разработке приложений для работы с разными СУБД,
лучше использовать безразмерный varchar для лучшей переносимости бизнес-логики.

Резюме

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

Для хранения строк довольно комфортным выбором будет тип varchar без ограничения по длине (если нет жесткого условия, которое не в коем случае
нельзя нарушить). Тип char имеет ряд специфических особенностей, которые в большинстве случаев будут только мешать
при работе с базой данных. Тип text является специфическим для PostrgeSQL и не имеет никаких преимуществ/недостатком перед
типом varchar без ограничения по длине.

Дополнительные материалы

PostgreSQL Documentation: Character Types

PostgreSQL Documentation: TOAST

Please enable JavaScript to view the comments powered by Disqus.comments powered by Disqus

sql server 2008 — Размер VARCHAR (MAX) в ROW

спросил

Изменено
6 лет, 8 месяцев назад

Просмотрено
1к раз

В настоящее время я работаю над проектом, который позволит одному из наших клиентов синхронизировать данные из нашей размещенной среды с локальной базой данных клиента. Проблема в том, что клиенты могут выбирать из тысяч столбцов и создавать таблицы так, как они хотят. В дополнение к этому размер Столбцы VARCHAR неизвестны. Чтобы справиться с этим, я использую VARCHAR(MAX) для всех текстовых столбцов.

Чтобы определить, какие столбцы относятся к каким таблицам, клиент будет использовать инструмент (предоставляемый нами) для сопоставления наших полей с таблицей/столбцом по своему выбору. Мы ограничиваем количество полей до 500 на таблицу.

Моя проблема в том, что при создании установки для внутреннего тестирования я получаю предупреждение от SQL Server:

Максимальная длина строки превышает допустимый предел в 8060 байт. Для некоторых комбинаций больших значений операция вставки/обновления завершится ошибкой.

В одном примере таблицы, созданной для тестирования, имеется 247 (из 500) столбцов с типом NUMERIC(23, 10) , 235 (из 500) с типом VARCHAR(MAX) и 18 (из 500) с типом DATETIME .

Столбцы NUMERIC и DATETIME могут использовать в общей сложности 3355 байт (13 байтов на NUMERIC и 8 байтов на DATETIME ). Это просто оставляет столбцы VARCHAR(MAX) .

Из всего, что мне удалось найти, говорится, что данные в Столбец VARCHAR(MAX) может иметь размер до 2 ГБ, и все, что не может быть сохранено в строке, перемещается на другую страницу.

Вот страница Microsoft, которую я просматривал.

https://technet.microsoft.com/en-us/library/ms186981(v=sql.105).aspx

  • sql-server-2008

2

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Ограничения размера для столбцов CHAR/VARCHAR

Каждая марка базы данных определяет свои собственные ограничения для
CHAR / VARCHAR Типы SQL.

Типы CHAR и VARCHAR SQL

Для записи переносимого SQL необходимо использовать размеры типов CHAR и VARCHAR .
которая не выходит за пределы целевых марок баз данных (Informix, Oracle, SQL Server и т. д.).

Тип CHAR — это тип, заполненный пробелами: строка «abc» в
Столбец CHAR(200) фактически получит 197 дополнительных завершающих пробелов.
Тип VARCHAR предназначен для хранения строк символов переменной длины. Таким образом
CHAR( N ) Тип следует использовать для строковых данных фиксированной длины (таких как
как "ABC-123" кодов), а VARCHAR( N ) должен быть
используется для строковых данных переменной длины (таких как имена и описания). Кроме того, с некоторыми
базы данных брендов, в Значения VARCHAR , конечные пробелы семантически значимы, а конечные пробелы
CHAR Значения SQL не имеют значения.

Для Informix тип VARCHAR SQL был разработан с ограничением в 255 байт. На
с другой стороны, тип CHAR имеет гораздо больший предел в 32767 байт. На самом деле, это
должно было быть наоборот, так как заполненный пробелами тип CHAR скорее
для небольших данных фиксированной длины.

Для больших строк символов переменной длины компания Informix представила
LVARCHAR типа , сначала с ограничением в 2048 байт, а в младших версиях IDS с
лимит 32739 байт.

Большинство брендов баз данных, поддерживаемых Genero, имеют более высокий предел для VARCHAR , чем
тип CHAR . Например, Oracle DB CHAR имеет ограничение 2000,
в то время как VARCHAR2 имеет ограничение в 4000 (байтов или символов, в зависимости от семантики длины).

Примечание. Ограничение размера типа Genero BDL VARCHAR составляет 65 524 (аналогично
CHAR BDL) и, таким образом, может хранить Informix LVARCHAR или любой другой
марка базы данных Данные столбца VARCHAR .