Подтвердить что ты не робот

Разница между различными типами строк в SQL Server?

В чем разница между char, nchar, ntext, nvarchar, text и varchar в SQL?

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

4b9b3361

Ответ 1

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

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

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

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

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

Когда вы переходите к деталям, значение in-row vs. BLOB размывается для небольших длин, так как движок может оптимизировать хранилище и вытаскивать строку BLOB или вставлять значение строки в "маленький BLOB ', но это всего лишь деталь реализации. См. Таблица и индексная организация.

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

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

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

Ответ 2

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

Дополнительно - текст и ntext устарели для varchar (max) и nvarchar (max)

Ответ 3

text и ntext устарели в пользу varchar(max) и nvarchar(max)

Ответ 4

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) обеспечивают ту же функциональность.

Ответ 5

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

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

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

Text в большинстве случаев не рекомендуется.

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

Ответ 6

Я знаю только "char" и "varchar".

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

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

Ответ 7

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

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

Как здесь:

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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