2010-11-15 2 views

ответ

41

text и ntext устарели, поэтому опускайте их на мгновение. Для того, что осталось, имеются 3 измерения:

  • Unicode (UCS-2) vs.без Юникода: N перед именем обозначает Unicode
  • фиксированной длиной по сравнению с переменной длиной слова: var обозначает переменный, в противном случае фиксированного
  • В-строка против BLOB: (max) как длина обозначает BLOB, в противном случае это не- значение строки

Так с этим, вы можете прочитать значение любого типа в:

  • CHAR(10): это в двухрядный фиксированной длины, не Unicode размером 10
  • NVARCHAR(256): это в-строки переменной длины Unicode, размером до-256
  • VARCHAR(MAX): является переменной длины двоичных объектов не-Unicode

Устаревшей типы text и ntext соответствуют новым типам varchar(max) и nvarchar(max) соответственно.

Когда вы идете к деталям, смысл in-row VS. BLOB размывает при малых длинах как двигатель может оптимизировать хранение и тянуть BLOB в построчно или вытолкнуть значение построчно в «небольшой BLOB» блок распределения, но это всего лишь деталь реализации. См. Table and Index Organization.

С точки зрения программирования, все типы: CHAR, VARCHAR, NCHAR, NVARCHAR, VARCHAR(MAX) и NVARCHAR(MAX), поддерживают равномерную строку API: String Functions. Старые, устаревшие типы TEXT и NTEXT do не поддерживают этот API, у них есть отдельный, отложенный, TEXT API для управления. Вы не должны использовать устаревшие типы.

BLOB-типы поддерживают эффективные обновления на месте с использованием синтаксиса UPDATE table SET column.WRITE(@value, @offset).

Разница между типами фиксированной длины и переменной длины исчезает при сжатии строк на столе. При включенном сжатии строк фиксированные длины и длина переменной сохраняются в одном формате, а конечные пробелы не сохраняются на диске, см. Row Compression Implementation. Обратите внимание, что сжатие страницы подразумевает сжатие строк.

0

Я знаю только между «char» и «varchar».

символ: он может выделить память определенного размера она заполняется ли не

VARCHAR: она выделяет память на основе количества символов в ней, но она должна иметь некоторый размер, называемый максимальный размер.

7
  • 'n' представляет собой поддержку символов Юникода.
  • char - указывает строку с фиксированной длиной хранения. Пространство, выделенное с или без данных.
  • varchar - Varying длина место хранения. Пространство выделяется столько же, сколько длина данных в столбце.
  • текст - Хранить огромные данные. Выделенное пространство составляет 16 байт для хранения столбцов.

Дополнительно - текст и NTEXT устарели для VARCHAR (макс) и NVARCHAR (макс)

+3

-1 от меня. пространство НЕ выделяется в блоках по 16 байт. Он занимает 16 байт в хранилище столбцов, но он распределяется по-разному. Остальное в порядке. – TomTom

+1

@TomTom - Да, отредактировал мой ответ. –

+0

Сохраняет ли varchar все одинаковые размеры для всех строк столбца? – Panzercrisis

0

н-префикс: юникода. var *: переменная длина, остальная часть - фиксированная длина.

Все типы данных правильно и красиво ... документированы.

Как здесь:

http://msdn.microsoft.com/en-us/library/ms187752.aspx

Есть ли действительно случай применение для каждого из этих типов, или некоторые из них просто устарела?

Нет, есть хороший случай для ЛЮБОГО из них.

+1

Нет смысла использовать текст или текст. Он устарел, и поддержка будет удалена из будущих версий SQL-сервера. varchar (max) & nvarchar (max) следует использовать вместо этого. –

+0

правый. http://msdn.microsoft.com/en-us/library/ms187993.aspx – bevacqua

0

Текст предназначен для очень большого количества текста и, как правило, не предназначен для поиска (но может быть в некоторых случаях. В любом случае он будет медленным).

Типы символов char/nchar имеют фиксированные длины и дополняются, если введенные данные короче, в отличие от типов varchar/nvarchar, которые являются переменной длиной.

n типов поддерживает юникод, где не-n типов нет.

2

N префикс указывает на поддержку юникода и занимает в два раза больше байт на символ не-юникод.

Varchar - переменная длина. Вы используете дополнительных 2 байта за поле для хранения длины.

Char фиксированная длина. Если вы знаете, как долго будут ваши данные, используйте char, так как вы будете сохранить байты!

Text в основном не рекомендуется в моем опыте.

Осторожно использовать Varchar(max) и NVarchar(max), так как эти поля не могут быть проиндексированы.

+1

+1 для комментария индекса для varchar/nvarchar (max) –

0

Текст устарел.

Char - установленное значение. Когда вы говорите символ (10), вы резервируете 10 символов для каждой отдельной строки, независимо от того, используются они или нет. Используйте это для чего-то, что не должно изменять длину (например, почтовый индекс или SSN)

varchar является переменной. Когда вы говорите varchar (10), 2 байта зарезервированы для хранения размера данных, а также фактических данных (которые можно сказать только четыре байта).

N представляет собой уни-код. Дважды пространство.

3

n префикс просто означает Unicode. Они «n» работают аналогично обычным версиям, за исключением того, что они работают с текстом Unicode.

char - поле фиксированной длины. Таким образом, char (10), заполненный «Да», по-прежнему будет содержать 10 байт памяти.

varchar - поле переменной длины. char (10), заполненный «Да», займет 5 байт памяти (для использования типов данных var используется 2 байта).

char (n) длина строки x. Хранение = n байтов. varchar (n) длина строки x. Хранение = x + 2 байта.

vchar и nvarchar аналогичны, за исключением двух байтов на символ.

Вообще говоря, вы должны использовать char & char (над varchar & nvarchar) при работе с фиксированными или полуфиксированными строками. Хорошим примером может быть product_code или user_type, который всегда содержит n символов.

Вы не должны использовать текст (или ntext), поскольку он устарел. varchar (max) & nvarchar (max) обеспечивает ту же функциональность.

Смежные вопросы