В этой статье
Применимо к: SQL Server (все поддерживаемые версии)
Точность — это количество цифр в числе.Масштаб — это количество цифр справа от десятичной точки в числе. Например, число 123,45 имеет точность 5 и масштаб 2.
В SQL Server максимальная точность по умолчанию для числовых типов данных и decimal составляет 38. В более ранних версиях SQL Server максимальное значение по умолчанию составляет 28.
Длина для числового типа данных — это количество байтов, которые используются для хранения числа. Для varchar и char длина символьной строки — это количество байтов.Для nvarchar и nchar длина строки символов — это количество пар байтов. Длина для типов данных binary , varbinary и image — это количество байтов. Например, тип данных int может содержать 10 цифр, хранится в 4 байтах и не принимает десятичных знаков. Тип данных int имеет точность 10, длину 4 и масштаб 0.
При объединении двух выражений char , varchar , binary или varbinary длина результирующего выражения является суммой длин двух исходных выражений до 8000 байт.
При объединении двух выражений nchar или nvarchar длина результирующего выражения является суммой длин двух исходных выражений, до 4000 пар байтов.
При сравнении двух выражений одного и того же типа данных, но разной длины с использованием UNION, EXCEPT или INTERSECT, результирующая длина будет более длинной из двух выражений.
Точность и масштаб числовых типов данных, кроме десятичного , фиксированы.Когда арифметический оператор имеет два выражения одного типа, результат имеет один и тот же тип данных с точностью и масштабом, определенными для этого типа. Если у оператора есть два выражения с разными числовыми типами данных, правила приоритета типов данных определяют тип данных результата. Результат имеет точность и масштаб, определенные для его типа данных.
В следующей таблице определяется, как вычисляются точность и масштаб результата, когда результат операции имеет тип decimal .Результатом будет в десятичной системе счисления при любом из следующих значений:
.
Оба выражения являются десятичными .
Одно выражение — это десятичное , а другое — тип данных с более низким приоритетом, чем десятичный .
Выражения операндов обозначаются выражением e1 с точностью p1 и масштабом s1 и выражением e2 с точностью p2 и масштабом s2. Точность и масштаб для любого выражения, которое не является десятичным числом — это точность и масштаб, определенные для типа данных выражения.Функция max (a, b) означает следующее: взять большее значение из «a» или «b». Точно так же min (a, b) указывает, что нужно брать меньшее значение «a» или «b».
Эксплуатация
Точность результата
Шкала результатов *
e1 + e2
макс (s1, s2) + макс (p1-s1, p2-s2) + 1
макс. (S1, s2)
e1 — e2
макс (s1, s2) + макс (p1-s1, p2-s2) + 1
макс. (S1, s2)
e1 * e2
п1 + р2 + 1
s1 + s2
e1 / e2
p1 — s1 + s2 + макс (6, s1 + p2 + 1)
макс. (6, s1 + p2 + 1)
e1 {СОЮЗ | ИСКЛЮЧАЯ | ПЕРЕСЕЧЕНИЕ} e2
макс (s1, s2) + макс (p1-s1, p2-s2)
макс. (S1, s2)
e1% e2
мин. (P1-s1, p2 -s2) + макс (s1, s2)
макс. (S1, s2)
* Точность результата и масштаб имеют абсолютный максимум 38.Когда точность результата больше 38, она уменьшается до 38, а соответствующий масштаб уменьшается, чтобы попытаться предотвратить усечение неотъемлемой части результата. В некоторых случаях, таких как умножение или деление, масштабный коэффициент не будет уменьшен для сохранения десятичной точности, хотя может возникнуть ошибка переполнения.
Помимо операций сложения и вычитания, нам нужно max (p1 - s1, p2 - s2)
разрядов для хранения целой части десятичного числа. Если для их хранения недостаточно места, то есть max (p1 - s1, p2 - s2) , масштаб уменьшается, чтобы обеспечить достаточно места для составной части.Результирующий масштаб равен MIN (точность, 38) - max (p1 - s1, p2 - s2)
, поэтому дробная часть может быть округлена, чтобы соответствовать полученному масштабу.
В операциях умножения и деления нам нужно точек точности - масштабирование
мест для хранения неотъемлемой части результата. Масштаб можно уменьшить, используя следующие правила:
Результирующая шкала уменьшается до мин (шкала, 38 - (шкала точности))
, если целая часть меньше 32, потому что она не может быть больше 38 - (шкала точности)
. В этом случае результат может быть округлен.
Масштаб не изменится, если он меньше 6 и если целая часть больше 32. В этом случае может возникнуть ошибка переполнения, если он не помещается в десятичный (38, масштаб)
Масштаб будет установлен на 6, если он больше 6 и если целая часть больше 32. В этом случае и целая часть, и масштаб будут уменьшены, и результирующий тип будет десятичным (38,6). Результат может быть округлен до 6 знаков после запятой, или будет выдана ошибка переполнения, если целая часть не умещается в 32 разряда.
Примеры
Следующее выражение возвращает результат 0,000000 000000
без округления, так как результат может соответствовать десятичным числам (38,17)
:
select cast (0,0000009000 как десятичный (30,20)) * cast (1.0000000000 как десятичный (30,20)) [decimal 38,17]
В данном случае точность 61, а масштаб 40.
Целая часть (точность-масштаб = 21) меньше 32, поэтому этот случай соответствует случаю (1) в правилах умножения, и масштаб вычисляется как мин (масштаб, 38 - (точность-масштаб)) = мин (40, 38 - (61-40)) = 17
. Тип результата - в десятичной системе (38,17)
.
Следующее выражение возвращает результат 0,000001
для соответствия десятичным (38,6)
:
SELECT CAST (0,0000009000 AS DECIMAL (30,10)) * CAST (1,000000000000 AS DECIMAL (30,10)) [десятичное (38, 6)]
В данном случае точность 61, а масштаб 20.
Масштаб больше 6, а целая часть ( точность-масштаб = 41
) больше 32. Это случай (3) в правилах умножения, а тип результата - десятичное (38,6)
.
См. Также
Выражения (Transact-SQL) Типы данных (Transact-SQL)
Как выбор типа данных SQL Server влияет на производительность базы данных
Почему ваш выбор типа данных SQL Server имеет значение
Знаете ли вы, что неправильный выбор типа данных может существенно повлиять на структуру и производительность вашей базы данных? Разработчики и администраторы баз данных могут повысить производительность базы данных, понимая типы данных, поддерживаемые SQL Server, и последствия выбора других. Лучшая практика - это «правильный размер» типов данных, задавая бизнес-вопросы и определяя типы данных, которые лучше всего подходят для нужд организации и приложения.
Правильный выбор размера может привести к огромной экономии хранилища, что может привести к повышению производительности базы данных. Также следует помнить о ограничении размера страницы данных SQL Server 8 КБ и условиях, которые могут привести к разделению страницы. Также остерегайтесь неявных преобразований, нежелательного побочного продукта несоответствия типов данных.Принятие мер по предотвращению несоответствий и разделения страниц может значительно повысить производительность.
Ниже приведены некоторые рекомендации по правильному определению размеров ваших типов данных и повышению производительности базы данных.
Во-первых, давайте рассмотрим некоторые ключевые моменты, касающиеся типов данных SQL Server.
№1. В SQL Server для типов данных фиксированной и переменной длины предъявляются разные требования к хранилищу
Типы данных фиксированной ширины всегда требуют одинакового объема памяти, независимо от значения, хранящегося в этих столбцах или переменных.
Типы данных переменной ширины всегда имеют два дополнительных байта служебных данных.
Для типов данных, начинающихся с N (NCHAR и NVARCHAR), N означает количество сохраненных символов. Это N x 2. Поскольку NCHAR и NVARCHAR могут хранить информацию Unicode, для каждого символа требуется два байта памяти.
Если вы сохраняете значение, строковое значение, которое всегда будет коротким, или односимвольное значение, с точки зрения хранения лучше использовать CHAR (1) вместо VARCHAR (1).Даже если поле VARCHAR (1) пусто, ему все равно потребуется два байта памяти.
В следующей таблице приведена удобная сводка требований к хранилищу для типов данных фиксированной и переменной длины:
№ 2. Формат FIXVAR - это фактический физический формат, который SQL Server использует для хранения записи .
№ 3. С помощью столбцов фиксированной ширины легко найти данные в записях, потому что размер F-данных легко вычисляется
Напротив, для столбцов переменной ширины размер каждого значения варьируется от записи к записи.
Когда используются столбцы переменной ширины, SQL Server использует указатели, чтобы помочь ему перемещаться и находить данные. Если таблица состоит из типов данных полностью фиксированной ширины, для одной записи в этой таблице всегда потребуется определенный объем памяти.
№ 4. При выборе правильного размера типов данных рекомендуется проанализировать, является ли тип данных подходящим контейнером для значения, которое будет храниться.
Важно задавать бизнес-вопросы о будущем направлении организации.Цель правильного определения размера - определить, подходит ли тип данных для приложения или бизнеса.
Ниже приведена таблица, в которой приведены требования к хранению и диапазоны значений для различных типов данных:
И ниже приведены несколько примеров правильного определения размера данных для различных ситуаций:
№ 5. Выбор правильного размера стола может привести к огромной экономии места.
В приведенном ниже примере минимальный размер таблицы сотрудников правильного размера составляет 104 байта по сравнению с 1304 байтами в таблице сотрудников, размер которой не соответствует требованиям.
Вот таблица сотрудников нужного размера:
№ 6. SQL Server использует свой собственный контейнер, называемый страницей данных, для хранения записей на диске .
Существует три типа страниц данных: 1) данные в строке, 2) данные переполнения строки и 3) данные LOB. Все страницы имеют фиксированный размер 8 КБ или 8 192 байта.
Страницы данных состоят из трех компонентов: 1) 96-байтового заголовка страницы, 2) записей данных и 3) массива записей или слотов, которые занимают 2 байта на запись.
Разработчики и администраторы баз данных должны знать следующую информацию:
Предел 8 КБ влияет на то, что может поместиться на странице данных. Обычно данные хранятся в строке. Однако, если запись длиннее 8 КБ байтов, это представляет проблему. Одна запись не может занимать несколько страниц данных. В результате необходимо использовать страницы данных с переполнением строк или больших объектов.
VARCHAR (8000) и NVARCHAR (4000) используют страницы данных переполнения строки
VARCHAR (MAX) и NVARCHAR (MAX) используют страницы данных LOB
Если строка превышает значение второй страницы данных размером 8 КБ, SQL Server создаст цепочку из разных страниц.Это может привести к дополнительным требованиям к памяти и дополнительным накладным расходам ввода-вывода.
Помните, что SQL Server работает в пределах 8 КБ страницы данных, потому что это имеет реальные последствия при настройке производительности.
# 7: ведение журнала транзакций может снизить производительность SQL Server
Еще одно соображение, о котором следует помнить, - это активность журнала транзакций. SQL Server записывает в журнал транзакций каждый раз, когда выполняется инструкция INSERT, UPDATE или DELETE. Объем записываемого журнала транзакций пропорционален объему работы, выполняемой SQL Server.
Чем больше работы будет выполнено на серверной части с ведением журнала транзакций, тем больше времени потребуется для выполнения запросов. Том журнала транзакций также влияет на резервное копирование / восстановление, репликацию, доставку журналов, зеркальное отображение и группы доступности. В системах с высоким уровнем транзакций ведение журнала транзакций увеличивает конкуренцию за ресурсы. Важно помнить, что весь ввод-вывод требует больше работы для SQL Server.
# 8: Разделение страниц дорого с точки зрения хранения, и по возможности его лучше избегать
Если таблица SQL Server кластеризована и имеет кластерный индекс, может произойти разделение страниц. Если новая запись вставляется на страницу данных, которая уже заполнена, SQL Server выделяет другую страницу в другом месте. Он берет около половины записей данных с исходной страницы, перемещает их на новую страницу и пытается снова вставить новую запись. Если новая запись по-прежнему не подходит, SQL Server создаст еще одно разделение страницы.Каскадное разделение страниц может быть очень дорогостоящим с точки зрения хранения.
Хотя разбиение страниц обычно происходит только в кластеризованных таблицах и только при операциях INSERT, существуют ситуации, которые могут непреднамеренно привести к разделению страниц. Например:
Обновляет столбец переменной длины . Разделение страниц также может происходить при обновлении столбца переменной длины. Если запись не может быть обновлена на месте или где-либо еще на той же странице, операция UPDATE превращается в DELETE и INSERT.Затем операция INSERT запускает разделение страницы.
Использование GUID для ключей кластеризации. Если имеется много одноэлементных INSERTS и GUID используется для ключа кластеризации, весьма вероятно, что разделение страницы будет происходить почти при каждом INSERT.
Я рекомендую создать следующие ключи кластеризации:
Узкий . Это экономит место.
Уникальный . Ключ кластеризации не должен повторяться.
Статический . Ключ для данной записи всегда должен оставаться неизменным.
Постоянно растущий . Если ключ кластеризации постоянно увеличивается, активная точка находится в конце последовательности ключей кластеризации, поэтому разделение страниц не происходит в середине последовательности.
Автоинкремент целых чисел и автоинкремент больших целых чисел соответствуют этим четырем критериям.
У некоторых команд возникает соблазн использовать NEWSQUENTIALID (). Это приводит к автоматически увеличивающемуся идентификатору GUID.Когда организация исправляет свои SQL-серверы, она должна перезагрузить базовый Windows Server. Затем начальная точка NEWSEQUENTIALID () сбрасывается на другое значение. Это потенциально опасно и очень рискованно. Если команда действительно хочет использовать идентификаторы GUID, лучше всего разделить ключ кластеризации и первичный ключ.
# 9: Неявные преобразования в SQL Server могут привести к снижению производительности
В SQL Server, если два поля имеют разные типы данных, их значения не считаются одинаковыми, даже если они кажутся идентичными внешнему наблюдателю.Преобразования значений в SQL Server подчиняются предустановленным правилам приоритета. Маленькие типы данных всегда преобразуются в более крупные типы данных. Затем SQL Server может сравнить значения. Это влияет на производительность кода T-SQL.
Вот таблица с правилами приоритета:
Ниже приведены некоторые дополнительные моменты, о которых следует помнить о неявных преобразованиях:
Если вы не соответствуете типам данных, вы не сможете выполнять поиск по своим индексам .При несовпадении типов данных SQL Server требует гораздо больше работы для выполнения запросов. Если вы измените несколько типов данных и сопоставите их, вы сможете значительно повысить производительность.
Некоторые преобразования бесплатны . К ним относятся преобразования между CHAR и VARCHAR, а также преобразования между NCHAR и NVARCHAR.
В UNICODE или нет - это все о компромиссах . Если вы по умолчанию используете VARCHAR, данные могут быть потеряны, и вам может потребоваться рефакторинг.Если вы используете NVARCHAR, требования к хранилищу и вводу-выводу удваиваются.
Использование NVARCHAR (500) может увеличить стоимость планов выполнения SQL Server . Когда SQL Server создает план выполнения, он использует затраты и оценки. Одна из оценок, используемых в алгоритме, - средний размер строки. При использовании типа данных переменной ширины SQL Server не знает средний размер строки и не запрашивает данные. Вместо этого требуется определение типа данных. Если вы используете NVARCHAR (500) в качестве определения типа данных, это может привести к раздуванию плана выполнения.
Существуют инструменты для поиска неявных преобразований . Джонатан Кехайас написал код для сканирования кеша вашего плана выполнения и поиска кода, страдающего от неявных преобразований. Хотя этот инструмент полезен, не рекомендуется запускать его в производственной базе данных.
Быстрая работа базы данных начинается с выбора правильного типа данных
Разработчики и администраторы баз данных могут повысить производительность базы данных, начав с правильного определения размеров данных.Выбор подходящего типа данных может существенно повлиять на экономию места. Когда разработчики хорошо знакомы с механизмом хранения, это позволяет им писать более эффективный код и выжимать из кода дополнительные возможности.
Об авторе
Энди Юн - старший инженер по решениям SentryOne и Microsoft MVP. Он работает с SQL Server в течение 15 лет как разработчик баз данных и администратор. Используя знания о внутреннем устройстве SQL Server и обширный опыт работы в средах с высоким уровнем транзакций, он стремится сделать T-SQL более компактным и экономичным. Энди очень увлечен передачей знаний другим, регулярно выступая в группах пользователей, субботах SQL и саммите PASS. Энди является соучредителем Чикагской ассоциации SQL, одним из руководителей группы пользователей пригородных районов Чикаго и членом организационного комитета по субботам по SQL в Чикаго. Этот документ был адаптирован из презентации Энди, сделанной на SQLBits XVI.
10.5.4 Сопоставление типов сервера Microsoft SQL
10.5.4 Сопоставление типов сервера Microsoft SQL
В следующей таблице показано соответствие между Microsoft SQL.
Типы данных сервера (источника) и типы данных MySQL.
Таблица 10.2 Отображение типов
Тип источника
MySQL Тип
Комментарий
ИНТ
ИНТ
TINYINT
TINYINT
В MySQL установлен флаг UNSIGNED.
МАЛЕНЬКИЙ
МАЛЕНЬКИЙ
BIGINT
BIGINT
БИТ
ТИНИИНТ (1)
ПОПЛАВОК
ПОПЛАВК
Значение точности используется для размера хранилища в обоих.
НАСТОЯЩИЙ
ПОПЛАВК
ЧИСЛО
ДЕСЯТИЧНЫЙ
ДЕСЯТИЧНЫЙ
ДЕСЯТИЧНЫЙ
ДЕНЬГИ
ДЕСЯТИЧНЫЙ
МАЛЕНЬКАЯ ДЕНЬГА
ДЕСЯТИЧНЫЙ
СИМВОЛ
СИМВОЛ / ДЛИННЫЙ ТЕКСТ
В зависимости от длины. MySQL Server 5.6 и выше может иметь CHAR
столбцы длиной до 255 символов. Что-либо
больший размер переносится как LONGTEXT.
NCHAR
СИМВОЛ / ДЛИННЫЙ ТЕКСТ
В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов. Что-либо
больше переносится в один из типов больших двоичных объектов ТЕКСТ. В
MySQL, набор символов строк зависит от столбца
набор символов вместо типа данных.
VARCHAR
VARCHAR / MEDIUMTEXT / LONGTEXT
В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов. Что-либо
больше переносится в один из типов больших двоичных объектов ТЕКСТ.
NVARCHAR
VARCHAR / MEDIUMTEXT / LONGTEXT
В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов.Что-либо
больше переносится в один из типов больших двоичных объектов ТЕКСТ. В
MySQL, набор символов строк зависит от столбца
набор символов вместо типа данных.
ДАТА
ДАТА
ДАТА
ДАТА
ДАТА ВРЕМЯ2
ДАТА
Диапазон дат в MySQL: 1000-01-01 00:00:00.От 000000 до 9999-12-31
23: 59: 59.999999 '. Примечание: значения долей секунды приводятся только
хранится с MySQL Server 5.6.4 и выше.
МАЛЕНЬКАЯ ВРЕМЯ
ДАТА
DATETIMEOFFSET
ДАТА
ВРЕМЯ
ВРЕМЯ
TIMESTAMP
TIMESTAMP
ROWVERSION
TIMESTAMP
ДВОИЧНЫЙ
ДВОИЧНЫЙ / СРЕДНИЙ / LONGBLOB
В зависимости от длины.
ПЕРЕМЕННАЯ
VARBINARY / MEDIUMBLOB / LONGBLOB
В зависимости от длины.
ТЕКСТ
VARCHAR / MEDIUMTEXT / LONGTEXT
В зависимости от длины.
NTEXT
VARCHAR / MEDIUMTEXT / LONGTEXT
В зависимости от длины.
ИЗОБРАЖЕНИЕ
TINYBLOB / MEDIUMBLOB / LONGBLOB
В зависимости от длины.
SQL_VARIANT
не мигрировал
Этот тип данных не поддерживается.
ТАБЛИЦА
не мигрировал
Этот тип данных не поддерживается.
ИЕРАРХИД
не мигрировал
Этот тип данных не поддерживается.
УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР
VARCHAR (64)
Уникальный флаг, установленный в MySQL.Нет специальной поддержки для вставки
значения уникального идентификатора.
ИМЯ СИСТЕМЫ
VARCHAR (160)
XML
ТЕКСТ
Типы данных SQL Server, поддерживаемые в ArcGIS — ArcMap
Когда вы создаете таблицу или добавляете столбец в таблицу в базе данных, вы определяете определенный тип данных для столбца.Типы данных определяют следующее:
Какие значения вы можете хранить в столбце Какие операции вы можете использовать с данными в этом столбце Как данные в этом столбце хранятся в базе данных ArcGIS работает с определенными типы данных. Когда вы обращаетесь к таблице базы данных через подключение к базе данных, слой запроса или веб-сервис, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не отображает неподдерживаемые типы данных, и вы не можете редактировать неподдерживаемые типы данных через ArcGIS.Точно так же, когда вы используете ArcGIS для копирования и вставки таблиц, содержащих неподдерживаемые типы данных, из одной базы данных в другую, ArcGIS вставляет только столбцы, которые используют поддерживаемый тип данных.
В первом столбце следующей таблицы перечислены типы данных ArcGIS. Во втором столбце указан тип данных SQL Server, созданный ArcGIS. Третий столбец показывает, какие другие типы данных SQL Server (если есть) сопоставляются с типом данных ArcGIS, когда вы просматриваете таблицу, созданную вами вне ArcGIS. В последнем столбце при необходимости представлена дополнительная информация.
Типы данных ArcGIS Созданные типы данных SQL Server Другие типы данных SQL Server, которые можно просмотреть Примечания
BLOB
двоичная переменная (макс. )
двоичная, изображение, временная метка, двоичная переменная (n)
Дата
datetime2 (7)
datetime2 (n), datetime, smalldatetime
Двойной
numeric (p, s)
decimal, float, money, smallmoney
Точность и масштаб, указанные в ArcGIS, могут повлиять на результирующий тип данных, созданный в базе данных.Дополнительную информацию см. В разделе Типы данных полей ArcGIS.
Поплавок
numeric (p, s)
real
Точность и масштаб, указанные в ArcGIS, могут повлиять на результирующий тип данных, созданный в базе данных. Дополнительную информацию см. В разделе Типы данных полей ArcGIS.
Геометрия
В многопользовательской базе геоданных тип данных SQL Server, который создается, зависит от параметра GEOMETRY_STORAGE ключевого слова конфигурации, используемого при создании класса пространственных объектов.SDEBINARY = int; ГЕОМЕТРИЯ = столбец геометрии; ГЕОГРАФИЯ = столбец географии.
В базе данных вы указываете, использовать ли GEOMETRY или GEOGRAPHY при создании класса пространственных объектов.
В настольных базах геоданных и базах геоданных рабочих групп всегда используется тип GEOMETRY.
ArcGIS не поддерживает следующие подтипы геометрии:
CircularString CompoundCurve CurvePolygon GeometryCollection Глобальный идентификатор
4 уникальный 9085 geometry поддерживается только в базах данных
GUID
уникальный идентификатор
Длинное целое число
внутренний
Растр
BLOB, int
Растровые типы данных поддерживаются только в базах геоданных.
В настольных базах геоданных и базах геоданных рабочих групп растры всегда создаются как типы данных BLOB.
В многопользовательских базах геоданных тип данных SQL Server, который создается, зависит от ключевого слова конфигурации, используемого при создании набора растровых данных или набора данных мозаики. Если для параметра RASTER_STORAGE ключевого слова задано значение RASTERBLOB, создается столбец BLOB; если установлено значение BINARY, создается столбец типа int.
ИД ОБЪЕКТА
int (4) при создании в многопользовательской базе геоданных
целое число со свойством идентификации при создании в базе данных
Тип ArcGIS ObjectID является зарегистрированным столбцом идентификатора строки для таблицы (или класса пространственных объектов. ) В таблице может существовать только один.
Короткое целое
smallint
bit, tinyint
Текст
varchar, nvarchar, varchar (max), nvarchar (max)
char, nchar
Типы текстовых данных Если вы создаете поле varchar или varchar (max) в базе данных SQL Server, оно будет сопоставлено с типом данных ArcGIS TEXT при просмотре в ArcGIS.Если вы создаете текстовое поле в базе данных SQL Server из ArcGIS, используется либо nvarchar, либо nvarchar (max).
В многопользовательской базе геоданных, если для параметра конфигурации UNICODE_STRING задано значение FALSE, а текстовое поле содержит 7 999 символов или меньше, используется VARCHAR.
Если для параметра конфигурации UNICODE_STRING установлено значение FALSE, а текстовое поле содержит 8000 символов или более, используется VARCHAR (MAX).
Если для параметра конфигурации UNICODE_STRING установлено значение TRUE, а текстовое поле содержит 3999 символов, используется NVARCHAR.
Если для параметра конфигурации UNICODE_STRING установлено значение TRUE, а текстовое поле содержит 4000 символов или более, используется NVARCHAR (MAX).
Типы геометрических данных Как указано в таблице, ArcGIS создает и может работать с тремя типами геометрических данных в SQL Server: сжатый двоичный файл, геометрия SQL Server и география SQL Server.
Сжатый двоичный код Тип хранения сжатого двоичного кода Esri использует двоичный механизм хранения для хранения геометрии объектов.Сжатое двоичное хранилище геометрии может использоваться только в базах геоданных. Сжатый двоичный класс пространственных объектов состоит из трех таблиц: бизнес-таблицы, таблицы объектов и таблицы пространственного индекса.
После проверки геометрии клиентское приложение сжимает и отправляет ее в базу геоданных, где она сохраняется в сжатом двоичном формате в таблице объектов или F-таблице. Сжатие геометрии на клиенте выгружает задачу с сервера базы данных и сокращает время передачи для отправки геометрии.Он также предлагает эффективное хранение и извлечение пространственных данных за счет сокращения пространства, необходимого для хранения данных, на целых 40 процентов.
Бизнес-таблица содержит атрибуты и пространственный столбец. Пространственный столбец является ключом к таблицам объектов и пространственных индексов.
Связью между бизнес-таблицей и таблицей объектов управляют через пространственный столбец и столбец идентификатора объекта (FID). Этот ключ, поддерживаемый ArcGIS, уникален.
SQL Server Geometry Ниже приводится краткое описание типа Microsoft Geometry.Дополнительные сведения о типе геометрии и его использовании см. В документации Microsoft SQL Server.
Тип Microsoft Geometry поддерживает любую систему координат X / Y. Планарные (плоская Земля, Евклидова) вычисления и прямолинейная интерполяция между вершинами используются для визуализации и пространственного сравнения. Соответствует простым функциям Open Geospatial Consortium (OGC) для спецификации SQL версии 1.1.9 и совместим с SQL MM, стандартом ISO. SQL Server Geography Ниже приводится краткое описание типа Microsoft Geography. Дополнительные сведения о типе Geography и его использовании см. В документации Microsoft SQL Server.
Тип «География» поддерживает многие стандартные географические системы координат, такие как широта и долгота GPS. Microsoft требует, чтобы вы использовали SRID и географические системы координат, определенные в словаре данных SQL Server.
Модель эллипсоида (круглая Земля) и большая эллиптическая интерполяция отрезков прямых между вершинами используются для вычислений и пространственных сравнений. Тип "География" использует экстент глобального (сфероидального) слоя. Координаты данных не могут превышать глобального экстента.
Типы растровых данных Тип растра по умолчанию, используемый в базах геоданных в SQL Server, - это тип BLOB (rasterblob).
Список типов данных в SQL Server 2017
Эта статья содержит краткий справочник по системным типам данных, доступных в SQL Server 2017, а также некоторую базовую информацию, такую как максимальная длина в байтах, точность, масштаб и то, допускает ли тип данных значение NULL или нет ( 1
означает это значение NULL, 0
означает, что оно не допускает значения NULL).
Точные числа
Имя
Макс.длина
точность
Масштаб
Можно обнулить?
bigint
8
19
0
1
бит
1
1
0
1
десятичный
17
38
38
1
внутренний
4
10
0
1
деньги
8
19
4
1
числовой
17
38
38
1
smallint
2
5
0
1
smallmoney
4
10
4
1
tinyint
1
3
0
1
Приблизительные цифры
Имя
Макс. длина
точность
Масштаб
Можно обнулить?
поплавок
8
53
0
1
реальный
4
24
0
1
Дата и время
Имя
Макс.длина
точность
Масштаб
Можно обнулить?
дата
3
10
0
1
datetime2
8
27
7
1
дата и время
8
23
3
1
datetimeoffset
10
34
7
1
малое время
4
16
0
1
время
5
16
7
1
Строки символов
Имя
Макс. длина
точность
Масштаб
Можно обнулить?
знак
8000
0
0
1
текст
16
0
0
1
варчар
8000
0
0
1
Строки символов Юникода
Имя
Макс.длина
точность
Масштаб
Можно обнулить?
nchar
8000
0
0
1
текст
16
0
0
1
nvarchar
8000
0
0
1
Двоичные строки
Имя
Макс.длина
точность
Масштаб
Можно обнулить?
двоичный
8000
0
0
1
изображение
16
0
0
1
varbinary
8000
0
0
1
Прочие типы данных
Имя
Макс. длина
точность
Масштаб
Можно обнулить?
иерархия
892
0
0
1
sql_variant
8016
0
0
1
геометрия
-1
0
0
1
география
-1
0
0
1
метка времени *
8
0
0
0
uniqueidentifier
16
0
0
1
xml
-1
0
0
1
системное имя
256
0
0
0
* Тип данных timestamp является синонимом типа данных rowversion .Смотрите ниже для получения дополнительной информации.
Типы «курсор», «таблица» и «версия строки»
Я получил информацию из приведенных выше таблиц через представление системного каталога sys. types
. В дополнение к указанным выше типам в документации Microsoft по типам данных также перечислены типы курсора и таблицы , а также rowversion вместо timestamp .
Тип «отметка времени»
Microsoft сообщает, что синтаксис timestamp устарел.Рекомендуется теперь использовать версию строки вместо отметки времени везде, где это возможно, в наших операторах DDL.
Однако тем временем вы можете обнаружить, что столбцы по-прежнему определяются как отметка времени , даже если вы явно указываете версию строки при их создании (с использованием Transact-SQL). Тем не менее Microsoft рекомендует использовать этот синтаксис в будущем.
Также обратите внимание, что отметка времени в T-SQL / SQL Server отличается от типа данных отметки времени , определенного в стандарте ISO.
Похоже, что причина, по которой он устарел, связана с путаницей, вызванной его названием. Microsoft признала это в 2007 году и посоветовала попытаться решить эту проблему обратно совместимым способом в будущих выпусках.
Проверьте свою базу данных
Вы можете получить информацию о типах данных для ваших собственных баз данных с помощью системного представления sys.types
. См. Объяснение и примеры в разделе Как вернуть список типов данных в SQL Server. Запуск этого представления также возвращает любые псевдонимы и пользовательские типы, которые есть в базе данных.
»Краткое руководство по типам данных SQL Server Подобно актерам и актрисам второго плана, которым никогда не нравится быть в центре внимания, типы данных в SQL Server играют важную роль, но редко привлекают внимание. Фактически, выбор лучших типов данных для столбцов - одно из наиболее важных решений при проектировании таблиц SQL Server. По этой причине давайте уделим немного времени рассмотрению некоторых основных функций наиболее часто используемых типов данных SQL Server.
Символьные данные
Символьные данные в SQL Server могут быть представлены типом данных один байт на символ или Unicode, представлением двух байтов на символ.В Юникоде коды письменного английского языка содержат ноль в своем первом байте и код ANSI для этого символа во втором байте. Другими словами, если вы используете тип Unicode для хранения английского языка, вы удваиваете свои требования к хранилищу и вдвое сокращаете производительность чтения данных. Сохраните Unicode для тех случаев, когда это необходимо.
Символьные данные в SQL Server также могут быть сохранены в типах данных переменной и фиксированной длины. Если ваши данные не занимают все выделенное пространство в столбце фиксированной длины, данные заполняются пробелами, поэтому так и есть.Напротив, в столбцах переменной длины хранятся только фактические символы данных. Хотя это, кажется, говорит о том, что столбцы переменной длины лучше, столбцы переменной длины влекут за собой накладные расходы. По этой причине вам следует использовать столбцы переменной длины только тогда, когда преимущества значительны. Грубо говоря, первый столбец переменной длины в таблице стоит четыре дополнительных байта на строку. Каждый дополнительный столбец переменной длины в таблице стоит дополнительно два байта на строку. Кроме того, есть небольшой объем дополнительной обработки, связанной с данными переменной длины.
Символьные типы данных
CHAR - символы ANSI фиксированной длины
VARCHAR - символы ANSI переменной длины
NCHAR - символы Unicode фиксированной длины («N» означает «национальный».)
NVARCHAR - символы Unicode переменной длины
Кроме того, VARCHAR (MAX) и NVARCHAR (MAX) могут использоваться, когда данные могут (или фактически превышают) превышение примерно 8000 байт для соответствия строковым данным на странице SQL Server.
Типы двоичных данных
BINARY, VARBINARY и VARBINARY (MAX) в точности аналогичны CHAR, VARCHAR и VARCHAR (MAX). Единственное отличие состоит в том, что байты в двоичных типах данных не должны представлять символьные данные. Функции SQL, которые работают с символьными данными, обычно работают с двоичными данными точно так же.
Целочисленные типы данных
Целочисленные числовые типы данных легко понять. Поскольку мы хотим, чтобы строки нашей таблицы занимали как можно меньше байтов, мы просто выбираем наименьший целочисленный тип данных, который может выполнять эту работу.
BIGINT - восьмибайтовый тип с диапазоном примерно от минус до плюс девять квинтиллионов (не число, с которым вы сталкиваетесь каждый день).
INT - четырехбайтовый тип с диапазоном
SMALLINT - два байта, начиная с
TINYINT - один байт. Единственный беззнаковый тип данных SQL Server в диапазоне от 0 до 255.
BIT - один бит может использоваться для представления истинного / ложного, да / нет, вверх / вниз или любого другого двоичного выбора.
Десятичные дроби (точные числа)
Конечно, в реальных данных часто используются дробные величины. По историческим причинам существует два имени, DECIMAL и NUMERIC, для типов данных точной десятичной дроби SQL Server.Неважно, какое имя вы используете. Здесь мы будем придерживаться DECIMAL. Декларация DECIMAL включает две спецификации: точность и масштаб. Точность определяет общее количество цифр, а масштаб представляет количество цифр справа от десятичной точки (другими словами, насколько «велико» число). Например,
ДЕСЯТИЧНАЯ ЧАСТЬ (7,2)
подходит для числа, которое требует двух разрядов справа от десятичной дроби и не более семи цифр. Наибольшее число, которое может быть представлено в этом объявлении, будет 99999.99. DECIMAL поддерживает точность до 38 цифр, но, как всегда, мы объявляем только тот тип данных, который нам действительно нужен.
ДЕНЬГИ и МАЛЕНЬКИЕ ДЕНЬГИ
MONEY и SMALLMONEY не являются стандартными типами данных ANSI и сегодня являются чем-то вроде анахронизма. Они были созданы в эпоху, когда хранение данных DECIMAL было неэффективным для денежных значений. Но Microsoft улучшила эффективность типа данных DECIMAL, и ДЕНЬГИ больше не обеспечивают преимущества для хранения данных. Что еще хуже, вычисления с использованием типа даты MONEY могут давать ошибочные результаты.Не волнуйтесь; если вы делаете только суммы, ваши расчеты будут правильными. Но это не обязательно относится к вычислениям, включающим деление. Например, аналитик может пожелать вычислить долю каждого продукта в общей выручке. В этом расчете мы, вероятно, делим маленькие числа на значительно большие. В таком случае мы вполне можем получить близкий, но не совсем верный в числовом отношении ответ. Если вы хотите узнать больше о типе данных MONEY, в Learning Tree есть блог по этой теме: https: // blog.Learningtree.com/is-money-bad-the-money-datatype-in-sql-server/.
Типы данных с плавающей запятой
Типы данных FLOAT и REAL поддерживают стандарт IEEE 754 для данных с плавающей запятой. Однако для коммерческих приложений обычно лучше использовать точный тип данных DECIMAL для представления десятичных дробей. FLOAT и REAL приводят к ошибке округления, что часто не нравится бизнесменам. Лучше оставить данные с плавающей запятой ученым и инженерам.
Типы данных даты и времени
DATETIME - самый старый и до сих пор наиболее часто используемый тип данных datetime в SQL Server.Точность составляет чуть более трех миллисекунд. Во многих бизнес-приложениях достаточно сэкономить время с точностью до ближайшей минуты, что делает SMALLDATETIME лучшим выбором и позволяет сэкономить четыре байта для каждой точки данных.
Microsoft представила ряд новых типов данных datetime, которые предоставляют множество преимуществ. DATE сохраняет только дату без значения времени, не только сохраняя байты, но и избегая неудач, когда разработчики запросов забывают о возможном влиянии времени на тип данных DATETIME, особенно при запросах через интервалы времени.DATETIME2 (не самый образно названный тип данных) обеспечивает большую точность. DATETIMEOFFSET может быть полезен для глобальных организаций, поскольку сохраняет часовой пояс, а также дату и время.
Некоторые шансы и конец
У нас нет времени и места, чтобы обсуждать все типы данных SQL Server в деталях, которых они заслуживают, но вот несколько наблюдений по некоторым из более специализированных типов данных.
XML хранит текст xml в SQL Server, но он намного мощнее, чем хранение xml как текстового типа данных, поскольку предоставляет дополнительные инструменты XQuery и XPath для помощи в запросах и манипулировании этими данными.
UNIQUEIDENTIFER - это огромное число, шестнадцать байтов, которое требуется в некоторых приложениях, включая репликацию слиянием и использование хранилища данных файлового потока. В целом, однако, uniqueidentifier - плохой выбор для ключей. Ключи обычно появляются в нескольких местах в базе данных, и ненужное повторение шестнадцатибайтовых ключей, как правило, расточительно. Используйте UNIQUEIDENTIFIER только тогда, когда этого требует текущая задача.
ГЕОМЕТРИЯ и ГЕОГРАФИЯ - это типы, используемые для представления пространственных данных. Пространственные данные могут включать диаграммы и планы этажей офисов, но довольно часто это картографические данные. Геометрия - это плоское изображение, а география учитывает кривизну Земли. Ясно, что это специальные предметы; они вам либо не нужны, либо они вам очень нужны.
Вкратце…
Выбор наиболее подходящих типов данных в SQL Server - задача, требующая особого внимания. Мы представили здесь краткий обзор, но это должно быть только началом тщательного изучения типов данных SQL Server.включая преимущества и недостатки каждого.
АВТОР: Дэн Бускерк
Связанное обучение: Обучение SQL Server
.