Типы money и smallmoney (Transact-SQL) — SQL Server
- Чтение занимает 2 мин
В этой статье
Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse
Типы данных, представляющие денежные (валютные) значения. Data types that represent monetary or currency values.
RemarksRemarks
Тип данныхData type | ДиапазонRange | ПамятьStorage |
---|---|---|
moneymoney | От –922,337,203,685,477.5808 до 922,337,203,685,477.5807 (от –922,337,203,685,477.58-922,337,203,685,477.5808 to 922,337,203,685,477.5807 (-922,337,203,685,477.58 до 922,337,203,685,477.58 в Informatica.to 922,337,203,685,477.58 for Informatica. В Informatica поддерживается только два десятичных знака, а не четыре)Informatica only supports two decimals, not four.) | 8 байт8 bytes |
smallmoneysmallmoney | От -214 748,3648 до 214 748,3647- 214,748.3648 to 214,748.3647 | 4 байта4 bytes |
Типы данных money и smallmoney имеют точность до одной десятитысячной денежной единицы, которую они представляют.The money and smallmoney data types are accurate to a ten-thousandth of the monetary units that they represent. В Informatica типы данных money и smallmoney имеют точность до одной сотой денежной единицы, которую они представляют.For Informatica, the money and smallmoney data types are accurate to a one-hundredth of the monetary units that they represent.
Чтобы отделить дробные денежные единицы, например центы, от целых денежных единиц, используйте запятую.Use a period to separate partial monetary units, like cents, from whole monetary units. Например, 2,15 соответствует 2 долларам и 15 центам.For example, 2.15 specifies 2 dollars and 15 cents.
Для этих типов данных может использоваться любой из следующих символов валют.These data types can use any one of the following currency symbols.
Валютные или денежные данные не требуется заключать в одинарные кавычки ( ‘ ).Currency or monetary data does not need to be enclosed in single quotation marks ( ‘ ). Важно помнить, что, несмотря на возможность указания денежных значений, которым предшествует символ валюты, SQL ServerSQL Server не сохраняет какие-либо сведения о валюте, связанные с символом, а хранит только числовое значение.
Преобразование данных типа moneyConverting money data
При преобразовании типа данных integer в тип money используются денежные единицы.When you convert to money from integer data types, units are assumed to be in monetary units. Например, целочисленное значение 4 преобразуется в значение типа данных
В следующем примере выполняется преобразование значений типов smallmoney и money в значения типов varchar и decimal соответственно.The following example converts smallmoney and money values to varchar and decimal data types, respectively.
DECLARE @mymoney_sm SMALLMONEY = 3148.29,
@mymoney MONEY = 3148.29;
SELECT CAST(@mymoney_sm AS VARCHAR) AS 'SM_MONEY varchar',
CAST(@mymoney AS DECIMAL) AS 'MONEY DECIMAL';
Результирующий набор:Here is the result set.
SM_MONEY VARCHAR MONEY DECIMAL
------------------------------ ----------------------
3148.29 3148
(1 row(s) affected)
См. также разделSee also
ALTER TABLE (Transact-SQL) CAST и CONVERT (Transact-SQL) CREATE TABLE (Transact-SQL) Типы данных (Transact-SQL) DECLARE @local_variable (Transact-SQL) SET @local_variable (Transact-SQL) sys.types (Transact-SQL)ALTER TABLE (Transact-SQL) CAST and CONVERT (Transact-SQL) CREATE TABLE (Transact-SQL) Data Types (Transact-SQL) DECLARE @local_variable (Transact-SQL) SET @local_variable (Transact-SQL) sys.types (Transact-SQL)
date (Transact-SQL) — SQL Server
- 000Z» data-article-date-source=»ms.date»>07/23/2017
- Чтение занимает 7 мин
В этой статье
Определяет дату в SQL ServerSQL Server. Defines a date in SQL ServerSQL Server.
Описание типа данных datedate description
СвойствоProperty | ЗначениеValue |
---|---|
СинтаксисSyntax | datedate |
ИспользованиеUsage | DECLARE @MyDate dateDECLARE @MyDate date CREATE TABLE Таблица1 ( Столбец1 date )CREATE TABLE Table1 ( Column1 date ) |
Формат строковых литералов по умолчаниюDefault string literal format (используется для клиента нижнего уровня)(used for down-level client) | ГГГГ-ММ-ДДYYYY-MM-DD Дополнительные сведения см. в подразделе «Обратная совместимость для клиентов низкого уровня» следующего раздела.For more information, see the «Backward Compatibility for Down-level Clients» section that follows. |
ДиапазонRange | От 0001-01-01 до 9999-12-31 (от 1582-10-15 до 9999-12-31 для Informatica)0001-01-01 through 9999-12-31 (1582-10-15 through 9999-12-31 for Informatica) |
Диапазоны элементовElement ranges | ГГГГ обозначает 4 цифры, которые представляют год и принимают значения от 0001 до 9999.YYYY is four digits from 0001 to 9999 that represent a year. Для Informatica значение ГГГГ ограничено диапазоном от 1582 до 9999.For Informatica, YYYY is limited to the range 1582 to 9999. ДД обозначает две цифры, представляющие день указанного месяца и принимающие значения от 01 до 31 в зависимости от месяца.DD is two digits from 01 to 31, depending on the month, that represents a day of the specified month. |
Длина в символахCharacter length | 10 позиций10 positions |
Точность, масштабPrecision, scale | 10, 010, 0 |
Объем памятиStorage size | 3 байта, фиксированный3 bytes, fixed |
Структура хранилищаStorage structure | Дата хранится в одной переменной типа integer размером 1 или 3 байта. 1, 3-byte integer stores date. |
ТочностьAccuracy | Один деньOne day |
Значение по умолчаниюDefault value | 1900-01-011900-01-01 Это значение используется как присоединяемая часть даты при неявном преобразовании данных типа time в значение типа datetime2 или datetimeoffset.This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset. |
КалендарьCalendar | ГригорианскийGregorian |
Определяемая пользователем точность в долях секундыUser-defined fractional second precision | НетNo |
Учет и сохранение смещения часового поясаTime zone offset aware and preservation | НетNo |
Учет перехода на летнее времяDaylight saving aware | НетNo |
Поддерживаемые форматы строковых литералов для типа данных dateSupported string literal formats for date
В приведенной ниже таблице перечислены допустимые форматы строковых литералов для типа данных date. The following tables show the valid string literal formats for the date data type.
ЧисловойNumeric | ОписаниеDescription |
---|---|
mdymdy [м]м/дд/[гг]гг[m]m/dd/[yy]yy [м]м-дд-[гг]гг[m]m-dd-[yy]yy [м]м.дд.[гг]гг[m]m.dd.[yy]yy мгдmyd мм/[гг]гг/ддmm/[yy]yy/dd мм-[гг]гг/ддmm-[yy]yy/dd [м]м.[гг]гг.дд[m]m.[yy]yy.dd дмгdmy дд/[м]м/[гг]ггdd/[m]m/[yy]yy дд-[м]м-[гг]ггdd-[m]m-[yy]yy дд.[м]м.[гг]ггdd.[m]m.[yy]yy дгмdym дд/[гг]гг/[м]мdd/[yy]yy/[m]m дд-[гг]гг-[м]мdd-[yy]yy-[m]m дд.[гг]гг.[м]мdd.[yy]yy.[m]m гмдymd [гг]гг/[м]м/дд[yy]yy/[m]m/dd [гг]гг-[м]м-дд[yy]yy-[m]m-dd [гг]гг-[м]м-дд[yy]yy-[m]m-dd | Сочетания [м]м, дд и [гг]гг представляют в строке месяц, день и год, разделенные символом косой черты (/), дефисом (-) или точкой (.).[m]m, dd, and [yy]yy represent month, day, and year in a string with slash marks (/), hyphens (-), or periods (. ) as separators. Поддерживаются только двух- и четырехзначные форматы записи года.Only four- or two-digit years are supported. Для записи года рекомендуется всегда использовать четырехзначный формат.Use four-digit years whenever possible. Чтобы указать целое число в промежутке от 0001 до 9999, представляющее пороговое значение года при преобразовании двухзначной записи в четырехзначную, необходимо использовать параметр конфигурации сервера two digit year cutoff.To specify an integer from 0001 to 9999 that represents the cutoff year for interpreting two-digit years as four-digit years, use the Configure the two digit year cutoff Server Configuration Option. Примечание.Note! Для Informatica значение ГГГГ ограничено диапазоном от 1582 до 9999.For Informatica, YYYY is limited to the range 1582 to 9999. Если двузначное число, обозначающее год, меньше или равно двузначному числу из последних двух цифр порогового года, год относится к тому же столетию, что и пороговый год. A two-digit year that is less than or equal to the last two digits of the cutoff year is in the same century as the cutoff year. Если двузначное число, обозначающее год, больше двузначного числа из последних двух цифр порогового года, год относится к столетию, которое предшествует столетию порогового года.A two-digit year greater than the last two digits of the cutoff year is in the century that comes before the cutoff year. Например, если пороговое значение года для двухзначной записи равно 2049, то год, обозначенный двумя цифрами 49, интерпретируется как 2049, а год, обозначенный двумя цифрами 50, интерпретируется как 1950.For example, if the two-digit year cutoff is the default 2049, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950. Формат даты по умолчанию определяется текущими настройками языковых стандартов.The default date format is determined by the current language setting. Формат даты можно изменить с помощью инструкций SET LANGUAGE и SET DATEFORMAT. You can change the date format by using the SET LANGUAGE and SET DATEFORMAT statements. Формат гдм не поддерживается для типа данных date.The ydm format isn’t supported for date. |
Алфавитный форматAlphabetical | ОписаниеDescription |
---|---|
мес [дд][,] ггггmon [dd][,] yyyy мес дд[,] [гг]mon dd[,] [yy] мес гггг [дд]mon yyyy [dd] [дд] мес[,] гггг[dd] mon[,] yyyy дд мес[,][гг]ггdd mon[,][yy]yy дд [гг]гг месdd [yy]yy mon [дд] гггг мес[dd] yyyy mon гггг мес [дд]yyyy mon [dd] гггг [дд] месyyyy [dd] mon | Значение мес означает полное или сокращенное название месяца на текущем языке.mon represents the full month name or the month abbreviation given in the current language. Запятые являются необязательными, регистр букв не учитывается.Commas are optional and capitalization is ignored. Во избежание неоднозначности используйте четырехзначную запись года.To avoid ambiguity, use four-digit years. Если не указано число месяца, подразумевается первое число месяца.If the day is missing, the first day of the month is supplied. |
ISO 8601ISO 8601 | ОписаниеDescription |
---|---|
ГГГГ-ММ-ДДYYYY-MM-DD ГГГГММДДYYYYMMDD | То же, что и стандарт SQL.Same as the SQL standard. Этот формат является единственным международным стандартом.This format is the only format defined as an international standard. |
Без разделителейUnseparated | ОписаниеDescription |
---|---|
[гг]ггммдд[yy]yymmdd гггг[мм][дд]yyyy[mm][dd] | Данные типа date могут быть определены с помощью четырех, шести или восьми цифр.The date data can be specified with four, six, or eight digits. Строка из шести или восьми цифр всегда интерпретируется как гмд. A six- or eight-digit string is always interpreted as ymd. На месяц и день всегда должно приходиться по две цифры.The month and day must always be two digits. Строка из четырех цифр воспринимается как значение года.A four-digit string is interpreted as year. |
ODBCODBC | ОписаниеDescription |
---|---|
{ д ‘гггг-мм-дд’ }{ d ‘yyyy-mm-dd’ } | Зависит от API-интерфейса ODBC.ODBC API specific. |
Формат W3C XMLW3C XML format | ОписаниеDescription |
---|---|
гггг-мм-ддTZDyyyy-mm-ddTZD | Введен для использования в XML и SOAP.Supported for XML/SOAP usage. TZD обозначает часовой пояс (в виде номера или смещения +чч:мм и -чч:мм):TZD is the time zone designator (Z or +hh:mm or -hh:mm): — «чч:мм» обозначает смещение часового пояса.- hh:mm represents the time zone offset. чч — двузначное число от 0 до 14, представляющее количество часов в смещении часового пояса. hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset. |
Соответствие стандартам ANSI и ISO 8601ANSI and ISO 8601 compliance
Значение date соответствует стандартному определению ANSI SQL для григорианского календаря: «Замечание 85 — данные типа Datetime позволяют хранить даты григорианского календаря в виде чисел диапазона от 0001-01-01 CE до 9999–12–31 CE». date complies with the ANSI SQL standard definition for the Gregorian calendar: «NOTE 85 — Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001-01-01 CE through 9999-12-31 CE.»
Формат строковых литералов по умолчанию, используемый для клиентов низкого уровня, соответствует стандарту SQL, в котором он определен как ГГГГ-ММ-ДД.The default string literal format, which is used for down-level clients, complies with the SQL standard form that is defined as YYYY-MM-DD. Данный формат аналогичен определению даты в стандарте ISO 8601.This format is the same as the ISO 8601 definition for DATE.
Примечание
Для Informatica диапазон ограничен интервалом от 1582-10-15 (15 октября 1582 г.) до 9999-12-31 (31 декабря 9999 г.).For Informatica, the range is limited to 1582-10-15 (October 15, 1582 CE) to 9999-12-31 (December 31, 9999 CE).
Обратная совместимость для клиентов нижнего уровняBackward compatibility for down-level clients
Некоторые клиенты нижнего уровня не поддерживают типы данных time, date, datetime2 и datetimeoffset. Some down-level clients don’t support the time, date, datetime2, and datetimeoffset data types. В следующей таблице показано сопоставление типов экземпляра более высокого уровня SQL ServerSQL Server и клиентов низкого уровня.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.
Тип данных SQL ServerSQL ServerSQL ServerSQL Server data type | Формат строкового литерала по умолчанию, передаваемый клиенту низкого уровняDefault string literal format passed to down-level client | ODBC низкого уровняDown-level ODBC | OLEDB низкого уровняDown-level OLEDB | JDBC низкого уровняDown-level JDBC | SQLCLIENT низкого уровняDown-level SQLCLIENT |
---|---|---|---|---|---|
timetime | чч:мм:сс[.ннннннн]hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR | Java. sql.StringJava.sql.String | String или SqStringString or SqString |
datedate | ГГГГ-ММ-ДДYYYY-MM-DD | SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR | Java.sql.StringJava.sql.String | String или SqStringString or SqString |
datetime2datetime2 | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн]YYYY-MM-DD hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR | Java.sql.StringJava.sql.String | String или SqStringString or SqString |
datetimeoffsetdatetimeoffset | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:ммYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR | Java. sql.StringJava.sql.String | String или SqStringString or SqString |
Преобразование данных типа Date и TimeConverting date and time data
При преобразовании в типы данных даты и времени SQL ServerSQL Server отвергает все значения, которые он не распознает как значения даты или времени.When you convert to date and time data types, SQL ServerSQL Server rejects all values it doesn’t recognize as dates or times. Сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в статье Функции CAST и CONVERT (Transact-SQL).For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL).
Преобразование даты в другие типы данных даты и времениConverting date to other date and time types
В этом разделе описывается, что происходит при преобразовании типа данных date в другие типы даты и времени.This section describes what occurs when you convert a date data type to other date and time data types.
Преобразование в time(n) завершается сбоем, и появляется сообщение об ошибке 206: «Конфликт типов операндов: date несовместим с time».When the conversion is to time(n), the conversion fails, and error message 206 is raised: «Operand type clash: date is incompatible with time».
При преобразовании в datetime копируется дата.If the conversion is to datetime, date is copied. Следующий код демонстрирует результаты преобразования значения date
в значение datetime
.The following code shows the results of converting a date
value to a datetime
value.
DECLARE @date date= '12-10-25';
DECLARE @datetime datetime= @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)
Если при преобразовании в smalldatetime значение типа date находится в диапазоне значений smalldatetime, компонент даты копируется, а для компонента времени устанавливается значение 00:00:00. 000.When the conversion is to smalldatetime, the date value is in the range of a smalldatetime, the date component is copied, and the time component is set to 00:00:00.000. Если значение date выходит за диапазон значений smalldatetime, выводится сообщение об ошибке 242: «Преобразование типа данных date в тип данных smalldatetime привело к появлению значения, выходящего за диапазон допустимых значений». После этого для значения типа smalldatetime устанавливается значение NULL.When the date value is outside the range of a smalldatetime value, error message 242 is raised: «The conversion of a date data type to a smalldatetime data types resulted in an out-of-range value.»; and the smalldatetime value is set to NULL. Следующий код демонстрирует результаты преобразования значения date
в значение smalldatetime
.The following code shows the results of converting a date
value to a smalldatetime
value.
DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)
При преобразовании в datetimeoffset(n) дата копируется, а для времени устанавливается значение 00:00.0000000 +00:00.For conversion to datetimeoffset(n), date is copied, and the time is set to 00:00.0000000 +00:00. Следующий код демонстрирует результаты преобразования значения date
в значение datetimeoffset(3)
.The following code shows the results of converting a date
value to a datetimeoffset(3)
value.
DECLARE @date date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00. 000 +00:00
--
--(1 row(s) affected)
При преобразовании в datetime2(n) компонент даты копируется, а для компонента времени устанавливается значение 00:00.000000.When the conversion is to datetime2(n), the date component is copied, and the time component is set to 00:00.000000. Следующий код демонстрирует результаты преобразования значения date
в значение datetime2(3)
.The following code shows the results of converting a date
value to a datetime2(3)
value.
DECLARE @date date = '1912-10-25'
DECLARE @datetime2 datetime2(3) = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.000
--
--(1 row(s) affected)
Преобразование строковых литералов в датуConverting string literals to date
Преобразование строковых литералов в типы данных даты и времени разрешается, если все части строк записаны в допустимом формате. Conversions from string literals to date and time types are allowed if all parts of the strings are in valid formats. Иначе возникает ошибка времени выполнения.Otherwise, a runtime error is raised. Явные или скрытые преобразования, в которых не задан стиль преобразования типов данных даты и времени в строковые литералы, будут проведены в формате по умолчанию для текущего сеанса.Implicit conversions or explicit conversions that don’t specify a style, from date and time types to string literals will be in the default format of the current session. В таблице ниже приводятся правила преобразования строковых литералов в тип данных date.The following table shows the rules for converting a string literal to the date data type.
Строковый литерал входаInput string literal | datedate |
---|---|
ODBC DATEODBC DATE | Строковые литералы ODBC сопоставляются с типом данных datetime. ODBC string literals are mapped to the datetime data type. Любая операция присваивания литералов ODBC DATETIME типу данных date вызывает неявное преобразование между данным типом и типом datetime согласно правилам преобразования.Any assignment operation from ODBC DATETIME literals into a date type causes an implicit conversion between datetime and the type that the conversion rules define. |
ODBC TIMEODBC TIME | См. предыдущее правило ODBC DATE.See previous ODBC DATE rule. |
ODBC DATETIMEODBC DATETIME | См. предыдущее правило ODBC DATE.See previous ODBC DATE rule. |
только DATEDATE only | Простейший.Trivial |
только TIMETIME only | Указаны значения по умолчанию.Default values are supplied. |
только TIMEZONETIMEZONE only | Указаны значения по умолчанию.Default values are supplied. |
DATE + TIMEDATE + TIME | Используется компонент DATE входной строки. The DATE part of the input string is used. |
DATE + TIMEZONEDATE + TIMEZONE | Не допускается.Not allowed. |
TIME + TIMEZONETIME + TIMEZONE | Указаны значения по умолчанию.Default values are supplied. |
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE | Используется компонент DATE локального значения DATETIME.The DATE part of local DATETIME will be used. |
ПримерыExamples
В следующем примере сравниваются результаты приведения строкового типа к каждому из типов данных date и time.The following example compares the results of casting a string to each date and time data type.
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS
'datetimeoffset';
Результирующий набор:Here is the result set.
Тип данныхData type | Выходные данныеOutput |
---|---|
timetime | 12:35:29.12:35:29. 12345671234567 |
datedate | 2007-05-082007-05-08 |
smalldatetimesmalldatetime | 2007-05-08 12:35:002007-05-08 12:35:00 |
datetimedatetime | 2007-05-08 12:35:29.1232007-05-08 12:35:29.123 |
datetime2datetime2 | 2007-05-08 12:35:29.12345672007-05-08 12:35:29.1234567 |
datetimeoffsetdatetimeoffset | 2007-05-08 12:35:29. 1234567 +12:152007-05-08 12:35:29.1234567 +12:15 |
Впервые представлено в SQL Server 2008.First introduced in SQL Server 2008.
См. также разделSee also
Функции CAST и CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
Ничего не найдено для Programmirovanie 605 Data Types In T Sql %23Chto Takoe Tip Dannyh V Sql Server
Microsoft SQL Server
Всем привет! Сегодня мы с Вами сравним Azure Data Studio с SQL Server Management
Linux
Материал сегодня будет посвящен дистрибутиву Linux Kubuntu 16. 10, а именно мы рассмотрим особенности и
PostgreSQL
Приветствую Вас на сайте Info-Comp.ru! Сегодня мы поговорим о составном типе данных PostgreSQL, о
Linux
Приветствую Вас на сайте Info-Comp.ru! В данном материале мы с Вами рассмотрим 5 популярных
Microsoft SQL Server
Продолжаем изучать SQL, и сегодня мы будем говорить о достаточно полезной вещи в SQL
Microsoft SQL Server
В состав Microsoft SQL Server входит компонент SQL Server Integration Services, и сегодня мы
Типы данных SQL Server, поддерживаемые в ArcGIS—ArcGIS Pro
При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных, слой запроса или веб-сервис, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не отображает неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены SQL Server типы данных, создаваемые ArcGIS. В третьем столбце показано, какие другие SQL Server типы данных (если имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS. В последнем столбце при необходимости предоставляется дополнительная информация.
Типы данных ArcGIS | Созданные типы данных SQL Server | Другие типы данных SQL Server, которые можно просматривать | Примечания |
---|---|---|---|
BLOB | varbinary(max) | binary, image, timestamp, varbinary(n) | |
Date | datetime2(7) | datetime2(n), datetime, smalldatetime | |
Double | numeric(p,s) | decimal, float, money, smallmoney | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
Float | numeric(p,s) | real | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
Geometry | Укажите, что будет использоваться: GEOMETRY или GEOGRAPHY, – при создании класса пространственных объектов. ArcGIS не поддерживает следующие подтипы геометрии:
Вы не можете создавать в ArcGIS Pro классы объектов, которые используют сжатый двоичный тип хранения геометрии, но вы можете просматривать такие классы в ArcGIS Pro. Сжатые двоичные данные хранятся в базе данных как тип данных INT. | ||
Global ID | uniqueidentifier | Поддерживается только базами геоданных. | |
GUID | uniqueidentifier | ||
Long integer | int | ||
Raster | BLOB, int | Растровые типы данных поддерживаются только базами геоданных. В многопользовательских базах геоданных тип создаваемых данных SQL Server зависит от ключевого слова конфигурации, использующегося при создании набора растровых данных или набора данных мозаики. Если параметр RASTER_STORAGE ключевого слова равен RASTERBLOB, создается столбец BLOB, а если он равен BINARY – создается столбец int. | |
OBJECT ID | int(4) when created in an enterprise geodatabase integer with identity property when created in a database | В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
Short integer | smallint | bit, tinyint | |
Text | varchar, nvarchar, varchar(max), nvarchar(max) | char, nchar |
Текстовые типы данных
Если вы создаете поле varchar или varchar(max) в базе данных SQL Server, то оно будет совмещено с типом данных ArcGIS TEXT при просмотре в ArcGIS. Если вы создадите поле text в базе данных SQL Server в ArcGIS, то будет использоваться nvarchar или nvarchar(max).
В случае если параметр конфигурации UNICODE_STRING в многопользовательской базе геоданных равен FALSE, а длина текстового поля – 7999 символов и менее, используется VARCHAR.
Если параметр конфигурации UNICODE_STRING имеет значение FALSE, а длина текстового поля больше или равна 8000 символов, используется VARCHAR(MAX).
Если параметр конфигурации UNICODE_STRING имеет значение TRUE, а длина текстового поля меньше или равна 3 999 знаков, используется NVARCHAR.
Если параметр конфигурации UNICODE_STRING имеет значение TRUE, а длина текстового поля больше или равна 4 000 символов, используется NVARCHAR(MAX).
Геометрические типы данных
Как показано в таблице, ArcGIS Pro создает и может работать с двумя типами данных геометрии в SQL Server: SQL Server Geometry и SQL Server Geography.
SQL Server Geometry
Здесь представлено краткое описание типа Microsoft Geometry. Более подробные сведения о типе Geometry и его использовании можно найти в документации к Microsoft SQL Server.
- Тип Microsoft Geometry поддерживает любую систему координат X/Y.
- Для отображения и пространственных сравнений используются вычисления на плоскости (Евклидовы) и прямолинейная интерполяция между вершинами.
- Соответствует спецификации Open Geospatial Consortium (OGC) Simple Features for SQL версии 1.1.9 и совместимо с ISO-стандартом SQL MM.
SQL Server Geography
Здесь представлено краткое описание типа Microsoft Geography. Более подробные сведения о типе Geography и его использовании можно найти в документации к Microsoft SQL Server.
- Тип Geography поддерживает многие стандартные географические системы координат, например, широта-долгота GPS.
Microsoft рекомендует использовать SRID и географические системы координат, заданные в словаре данных SQL Server.
- Для вычислений и пространственных сравнений используются модель эллипсоида (круглая Земля) и интерполяция отрезков линий между вершинами Great Elliptic.
- Тип Geography использует глобальный (на сфере) экстент слоя.
Координаты данных не могут выходить за пределы глобального экстента.
Растровые типы данных
В базе геоданных на SQL Server по умолчанию используется тип BLOB (rasterblob).
Отзыв по этому разделу?
База Данных MySQL типы данных MySQL Server MS Access
Тип данных определяет, какое значение может содержать столбец: целочисленные данные, символьные данные, денежные данные, данные даты и времени, двоичные строки и т. д.
Типы данных SQL
Каждый столбец в таблице базы данных должен иметь имя и тип данных.
Разработчик SQL должен решить, какой тип данных будет храниться в каждом столбце при создании таблицы. Тип данных является ориентиром для SQL, чтобы понять, какой тип данных ожидается внутри каждого столбца, и он также определяет, как SQL будет взаимодействовать с хранимыми данными.
Примечание: Типы данных могут иметь разные имена в разных базах данных. И даже если имя такое же, размер и другие детали могут быть разными! Всегда проверяйте документацию!
Типы данных MySQL
В MySQL есть три основных типа данных: текст, число и дата.
Текстовые типы данных:
Тип данных | Описание |
---|---|
CHAR(size) | Содержит строку фиксированной длины (может содержать буквы, цифры и специальные символы). Фиксированный размер указывается в скобках. Может хранить до 255 символов |
VARCHAR(size) | Содержит строку переменной длины (может содержать буквы, цифры и специальные символы). Максимальный размер указывается в скобках. Может хранить до 255 символов. Примечание: Если поместить большее значение, чем 255, оно будет преобразовано в текстовый тип |
TINYTEXT | Содержит строку с максимальной длиной 255 символов |
TEXT | Содержит строку с максимальной длиной 65 535 символов |
BLOB | Для BLOB-объектов (двоичные большие объекты). Удерживает до 65 535 байт данных |
MEDIUMTEXT | Содержит строку с максимальной длиной 16 777 215 символов |
MEDIUMBLOB | Для BLOB-объектов (двоичные большие объекты). Удерживает до 16 777 215 байт данных |
LONGTEXT | Содержит строку с максимальной длиной 4 294 967 295 символов |
LONGBLOB | Для BLOB-объектов (двоичные большие объекты). Удерживает до 4 294 967 295 байт данных |
ENUM(x,y,z,etc.) | Позволяет ввести список возможных значений. В списке Enum можно вывести до 65535 значений. Если вставленное значение отсутствует в списке, будет вставлено пустое значение. Примечание: Значения сортируются в порядке их ввода. Вы вводите возможные значения в этом формате: Enum (‘ X ‘, ‘ Y ‘, ‘ Z ‘) |
SET | Аналогично Enum, за исключением того, что набор может содержать до 64 элементов списка и может хранить более одного выбора |
Типы данных чисел:
Тип данных | Описание |
---|---|
TINYINT(size) | -128 до 127 нормальный. 0 до 255 неподписанный *. Максимальное количество цифр может быть указано в скобках |
SMALLINT(size) | -32768 до 32767 нормальный. 0 до 65535 неподписанный *. Максимальное количество цифр может быть указано в скобках |
MEDIUMINT(size) | -8388608 до 8388607 нормальный. 0 до 16777215 неподписанный *. Максимальное количество цифр может быть указано в скобках |
INT(size) | -2147483648 до 2147483647 нормальный. 0 до 4294967295 неподписанный *. Максимальное количество цифр может быть указано в скобках |
BIGINT(size) | -9223372036854775808 до 9223372036854775807 в норме. 0 для 18446744073709551615 неподписанных *. Максимальное количество цифр может быть указано в скобках |
FLOAT(size,d) | Небольшое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d |
DOUBLE(size,d) | Большое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d |
DECIMAL(size,d) | Значение типа Double, хранящееся в виде строки и допускающее фиксированную десятичную точку. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d |
* целочисленные типы имеют дополнительный параметр, называемый неподписанным. Как правило, целое число переходит от отрицательного к положительному значению. Добавление неподписанного атрибута будет перемещаться, что диапазон вверх, поэтому он начинается с нуля, а не отрицательное число.
Типы данных дат:
Тип данных | Описание |
---|---|
DATE() | Свидание. Формат: гггг-мм-DD Примечание: Поддерживаемый диапазон от ‘ 1000-01-01 ‘ до ‘ 9999-12-31 ‘ |
DATETIME() | * комбинация даты и времени. Формат: гггг-мм-DD HH: MI: SS Примечание: Поддерживаемый диапазон от ‘ 1000-01-01 00:00:00 ‘ до ‘ 9999-12-31 23:59:59 ‘ |
TIMESTAMP() | * Временная метка. Значения timestamp хранятся в виде количества секунд со времени Unix (‘ 1970-01-01 00:00:00 ‘ UTC). Формат: гггг-мм-DD HH: MI: SS Примечание: Поддерживаемый диапазон от ‘ 1970-01-01 00:00:01 ‘ UTC до ‘ 2038-01-09 03:14:07 ‘ UTC |
TIME() | Время. Формат: HH: MI: SS Примечание: Поддерживаемый диапазон от ‘-838:59:59 ‘ до ‘ 838:59:59 ‘ |
YEAR() | Год в формате с двумя или четырьмя цифрами. Примечание: Допустимые значения в формате четырех цифр: 1901 до 2155. Допустимые значения в формате с двумя цифрами: 70 до 69, представляющие годы с 1970 по 2069 |
* даже если DateTime и timestamp возвращаются в том же формате, они работают очень по-разному. В запросе INSERT или Update временная метка автоматически устанавливает текущую дату и время. TIMESTAMP также принимает различные форматы, такие как ииииммддххмисс, ииммддххмисс, ГГГГММДД или YYMMDD.
Типы данных SQL Server
Типы строковых данных:
Тип данных | Описание | Максимальный размер | Хранения |
---|---|---|---|
char(n) | Фиксированная ширина символьной строки | 8,000 Символов | Определенная ширина |
varchar(n) | Переменная ширина символьная строка | 8,000 Символов | 2 байта + количество символов |
varchar(max) | Переменная ширина символьная строка | 1,073,741,824 Символов | 2 байта + количество символов |
text | Переменная ширина символьная строка | 2GB of text data | 4 байта + количество символов |
nchar | Фиксированная ширина строки Юникода | 4,000 Символов | Определенная ширина x 2 |
nvarchar | Переменная ширина Юникод строка | 4,000 Символов | |
nvarchar(max) | Переменная ширина Юникод строка | 536,870,912 Символов | |
ntext | Переменная ширина Юникод строка | 2GB of text data | |
binary(n) | Фиксированная ширина двоичной строки | 8,000 bytes | |
varbinary | Переменная ширина двоичная строка | 8,000 bytes | |
varbinary(max) | Переменная ширина двоичная строка | 2GB | |
image | Переменная ширина двоичная строка | 2GB |
Типы данных чисел:
Тип данных | Описание | Хранения |
---|---|---|
bit | Целое число, которое может быть 0, 1 или null | |
tinyint | Позволяет целые числа от 0 до 255 | 1 byte |
smallint | Позволяет целые числа между -32 768 и 32 767 | 2 bytes |
int | Позволяет целые числа между -2 147 483 648 и 2 147 483 647 | 4 bytes |
bigint | Позволяет целые числа между -9223372036854775808 и 9 223 372 036 854 775 807 | 8 bytes |
decimal(p,s) | Fixed precision and scale numbers. 38 – 1. Параметр p указывает максимальное общее количество цифр, которые могут быть сохранены (как слева, так и справа от десятичной запятой). p должно быть значением от 1 до 38. Значение по умолчанию — 18. Параметр s указывает максимальное число цифр, хранящихся справа от десятичной запятой. s должно быть значением от 0 до p. значение по умолчанию 0 | 5-17 bytes |
smallmoney | Денежные данные от-214 748,3648 до 214 748,3647 | 4 bytes |
money | Денежные данные от-922 337 203 685 477,5808 до 922 337 203 685 477,5807 | 8 bytes |
float(n) | Плавающая точность данных чисел от-1.79 e + 308 до 1.79 e + 308. Параметр n указывает, должно ли поле содержать 4 или 8 байт. float (24) содержит 4-байтное поле и float (53) содержит 8-байтное поле. Значение по умолчанию n — 53. | 4 or 8 bytes |
real | Плавающие данные о точности чисел от-38 e + | 4 bytes |
Типы данных дат:
Тип данных | Описание | Хранения |
---|---|---|
datetime | С 1 января 1753 по 31 декабря 9999 с точностью 3,33 миллисекунд | 8 bytes |
datetime2 | С 1 января 0001 по 31 декабря 9999 с точностью 100. | 6-8 bytes |
smalldatetime | С 1 января 1900 по 6 июня 2079 с точностью до 1 минуты | 4 bytes |
date | Хранить только дату. С 1 января 0001 по 31 декабря 9999 | 3 bytes |
time | Хранить время только для точности 100-ти секунд | 3-5 bytes |
datetimeoffset | Так же, как datetime2 с добавлением смещения часового пояса | 8-10 bytes |
timestamp | Хранит уникальный номер, который обновляется каждый раз при создании или изменении строки. Значение timestamp основывается на внутренних часах и не соответствует реальному времени. Каждая таблица может иметь только одну переменную timestamp |
Другие типы данных:
Тип данных | Описание |
---|---|
sql_variant | Хранит до 8 000 байт данных различных типов данных, за исключением текста, ntext и отметки времени |
uniqueidentifier | Хранит глобальный уникальный идентификатор (GUID) |
xml | Хранит XML-форматированные данные. Максимум 2 ГБ |
cursor | Хранит ссылку на курсор, используемый для операций с базой данных |
table | Хранит результирующий набор для последующей обработки |
Типы данных Microsoft Access
Тип данных | Описание | Хранения |
---|---|---|
Text | Используется для текста или комбинаций текста и чисел. 255 символов максимум | |
Memo | MEMO используется для больших объемов текста. Хранит до 65 536 символов. Примечание: Поле MEMO нельзя сортировать. Тем не менее, они доступны для поиска | |
Byte | Позволяет целые числа от 0 до 255 | 1 byte |
Integer | Позволяет целые числа между-32 768 и 32 767 | 2 bytes |
Long | Позволяет целые числа между-2 147 483 648 и 2 147 483 647 | 4 bytes |
Single | Одинарная точность с плавающей запятой. Будет обрабатывать большинство десятичных знаков | 4 bytes |
Double | Двойная точность с плавающей запятой. Будет обрабатывать большинство десятичных знаков | 8 bytes |
Currency | Использовать для валюты. Вмещает до 15 цифр целых долларов, плюс 4 десятичных знака. Совет: Вы можете выбрать валюту страны для использования | 8 bytes |
AutoNumber | Поля автонумерации автоматически дают каждой записи свой номер, обычно начиная с 1 | 4 bytes |
Date/Time | Использовать для дат и времени | 8 bytes |
Yes/No | Логическое поле может отображаться как Yes/No, true/false или вкл/выкл. В коде используйте Константы true и false (эквивалентно-1 и 0). Примечание: Значения NULL не разрешены в полях «да/нет» | 1 bit |
Ole Object | Может хранить изображения, аудио, видео, или другие BLOB-объекты (двоичные больших объектов) | up to 1GB |
Hyperlink | Содержать ссылки на другие файлы, включая веб-страницы | |
Lookup Wizard | Позволяет ввести список опций, которые затем можно выбрать из раскрывающегося списка | 4 bytes |
Типы данных T-SQL
Типы данных T-SQL
Последнее обновление: 12. 07.2017
При создании таблицы для всех ее столбцов необходимо указать определенный тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.
Язык T-SQL предоставляет множество различных типов. В зависимости от характера значений все их можно разделить на группы.
Числовые типы данных
- BIT: хранит значение 0 или 1. Фактически является аналогом булевого типа в языках программирования. Занимает 1 байт.
- TINYINT: хранит числа от 0 до 255. Занимает 1 байт. Хорошо подходит для хранения небольших чисел.
- SMALLINT: хранит числа от –32 768 до 32 767. Занимает 2 байта
- INT: хранит числа от –2 147 483 648 до 2 147 483 647. Занимает 4 байта. Наиболее используемый тип для хранения чисел.
- BIGINT: хранит очень большие числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, которые занимают в памяти 8 байт.
- DECIMAL: хранит числа c фиксированной точностью. Занимает от 5 до 17 байт в зависимости от количества чисел после запятой.
- NUMERIC: данный тип аналогичен типу DECIMAL.
- SMALLMONEY: хранит дробные значения от -214 748.3648 до 214 748.3647. Предназначено для хранения денежных величин. Занимает 4 байта. Эквивалентен типу DECIMAL(10,4).
- MONEY: хранит дробные значения от -922 337 203 685 477.5808 до 922 337 203 685 477.5807. Представляет денежные величины и занимает 8 байт. Эквивалентен типу DECIMAL(19,4).
- FLOAT: хранит числа от –1.79E+308 до 1.79E+308. Занимает от 4 до 8 байт в зависимости от дробной части.
- REAL: хранит числа от –340E+38 to 3.40E+38. Занимает 4 байта. Эквивалентен типу FLOAT(24).
Данный тип может принимать два параметра precision и scale: DECIMAL(precision, scale).
Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 38. По умолчанию оно равно 18.
Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.
Может иметь форму опредеения в виде FLOAT(n), где n представляет число бит, которые используются для хранения десятичной части числа (мантиссы). По умолчанию n = 53.
Примеры числовых столбцов:
1 2 3 4 | Salary MONEY, TotalWeight DECIMAL(9,2), Age INT, Surplus FLOAT |
Типы данных, представляющие дату и время
- DATE: хранит даты от 0001-01-01 (1 января 0001 года) до 9999-12-31 (31 декабря 9999 года). Занимает 3 байта.
- TIME: хранит время в диапазоне от 00:00:00.0000000 до 23:59:59.9999999. Занимает от 3 до 5 байт.
- DATETIME: хранит даты и время от 01/01/1753 до 31/12/9999. Занимает 8 байт.
- DATETIME2: хранит даты и время в диапазоне от 01/01/0001 00:00:00. 0000000 до 31/12/9999 23:59:59.9999999. Занимает от 6 до 8 байт в зависимости от точности времени.
- SMALLDATETIME: хранит даты и время в диапазоне от 01/01/1900 до 06/06/2079, то есть ближайшие даты. Занимает от 4 байта.
- DATETIMEOFFSET: хранит даты и время в диапазоне от 0001-01-01 до 9999-12-31. Сохраняет детальную информацию о времени с точностью до 100 наносекунд. Занимает 10 байт.
Может иметь форму TIME(n), где n представляет количество цифр от 0 до 7 в дробной части секунд.
Может иметь форму DATETIME2(n), где n представляет количество цифр от 0 до 7 в дробной части секунд.
Распространенные форматы дат:
- yyyy-mm-dd — 2017-07-12
- dd/mm/yyyy — 12/07/2017
- mm-dd-yy — 07-12-17
- Month dd, yyyy — July 12, 2017
В таком формате двузначные числа от 00 до 49 воспринимаются как даты в диапазоне 2000-2049. А числа от 50 до 90 как диапазон чисел 1950 — 1999.
Распространенные форматы времени:
- hh:mi — 13:21
- hh:mi am/pm — 1:21 pm
- hh:mi:ss — 1:21:34
- hh:mi:ss:mmm — 1:21:34:12
- hh:mi:ss:nnnnnnn — 1:21:34:1234567
Строковые типы данных
- CHAR: хранит строку длиной от 1 до 8 000 символов. На каждый символ выделяет по 1 байту. Не подходит для многих языков, так как хранит символы не в кодировке Unicode.
- VARCHAR: хранит строку. На каждый символ выделяется 1 байт. Можно указать конкретную длину для столбца — от 1 до 8 000 символов, например, VARCHAR(10). Если строка должна иметь больше 8000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб: VARCHAR(MAX).
- NCHAR: хранит строку в кодировке Unicode длиной от 1 до 4 000 символов. На каждый символ выделяется 2 байта. Например, NCHAR(15)
- NVARCHAR: хранит строку в кодировке Unicode. 31–1 байт при использовании значения MAX (VARBINARY(MAX)).
Количество символов, которое может хранить столбец, передается в скобках. Например, для столбца с типом CHAR(10) будет выделено 10 байт. И если мы сохраним в столбце строку менее 10 символов, то она будет дополнена пробелами.
Не подходит для многих языков, так как хранит символы не в кодировке Unicode.
В отличие от типа CHAR если в столбец с типом VARCHAR(10) будет сохранена строка в 5 символов, то в столце будет сохранено именно пять символов.
Еще один бинарный тип — тип IMAGE является устаревшим, и вместо него рекомендуется применять тип VARBINARY.
Остальные типы данных
- UNIQUEIDENTIFIER: уникальный идентификатор GUID (по сути строка с уникальным значением), который занимает 16 байт.
- TIMESTAMP: некоторое число, которое хранит номер версии строки в таблице. Занимает 8 байт.
- CURSOR: представляет набор строк.
- HIERARCHYID: представляет позицию в иерархии.
- SQL_VARIANT: может хранить данные любого другого типа данных T-SQL.
- XML: хранит документы XML или фрагменты документов XML. Занимает в памяти до 2 Гб.
- TABLE: представляет определение таблицы.
- GEOGRAPHY: хранит географические данные, такие как широта и долгота.
- GEOMETRY: хранит координаты местонахождения на плоскости.
Типы данных для больших объектов в SQL Server 2008 | Windows IT Pro/RE
. Как правило, эти изображения используются для демонстрации внешнего вида продуктов или другой графической информации на сайтах, и при этом они могут быть очень большими.
В SQL Server имеется много типов данных, которые могут применяться для различных типов LOB-хранилищ, но выбор правильного типа для LOB-хранилища может оказаться очень сложным, если вы вообще захотите хранить большие объекты в самой базе данных. Многие администраторы баз данных предпочитают хранить большие объекты вне баз данных. Основное правило такое: наилучшая производительность при работе с LOB-объектами размером менее 256 Кбайт достигается при их хранении в базе данных, с объектами размером более 1 Мбайт — вне БД.
Хранение LOB-объектов вне базы данных дает выигрыш в производительности, но также создает риски, так как отсутствует встроенный механизм обеспечения целостности данных. Чтобы помочь найти оптимальный способ хранения LOB-данных, необходимо понять различия между типами данных LOB в SQL Server. 30–1,1073741823). Этот тип данных появился в SQL Server 2005 и является рекомендуемым к использованию.
6. FILESTREAM. Тип данных FILESTREAM сочетает производительность доступа к LOB-объектам напрямую через файловую систему NTFS с целостностью и прямым доступом через механизм реляционных баз данных SQL Server. Он может использоваться как для двоичных, так и для текстовых данных и поддерживает файлы величиной вплоть до размера дискового тома. Использование типа FILESTREAM разрешается путем комбинирования настроек SQL Server и соответствующей базы данных и типа данных VARBINARY (MAX). Тип данных FILESTREAM появился в SQL Server 2008 и является рекомендуемым к использованию. Дополнительную информацию об этом типе данных можно найти в статье «Using SQL Server 2008’s FILESTREAM Data Type» по адресу http://www.sqlmag.com/article/tsql3/using-sql-server-2008-s-filestream-data-type.aspx).
7. XML. Используется для хранения данных в формате XML. 31–1,2147483647). Тип данных XML появился в SQL Server 2005 и является рекомендуемым к использованию.
8. VARBINARY. Тип данных VARBINARY, строго говоря, не является типом для хранения больших объектов, так как его размер ограничен 8000 байт. Его можно задействовать для хранения небольших объемов двоичных данных.
Майкл Оти ([email protected]) — технический директор Windows IT Pro и SQL Server Magazine, автор Microsoft SQL Server 2008 New Features (Osborne/McGraw-Hill)
Поделитесь материалом с коллегами и друзьями
Типы данных (Transact-SQL) — SQL Server
- 2 минуты на чтение
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL AzureAzure SQL Managed InstanceAzure Synapse Analytics Хранилище параллельных данных
В SQL Server каждый столбец, локальная переменная, выражение и параметр имеет связанный тип данных. Тип данных — это атрибут, определяющий тип данных, которые может содержать объект: целочисленные данные, символьные данные, денежные данные, данные даты и времени, двоичные строки и т. Д.
SQL Server предоставляет набор системных типов данных, которые определяют все типы данных, которые могут использоваться с SQL Server. Вы также можете определить свои собственные типы данных в Transact-SQL или Microsoft .NET Framework. Типы данных псевдонима основаны на типах данных, предоставляемых системой. Дополнительные сведения о типах данных псевдонимов см. В разделе CREATE TYPE (Transact-SQL).Определяемые пользователем типы получают свои характеристики от методов и операторов класса, который вы создаете с помощью одного из языков программирования, поддерживаемых .NET Framework.
Когда два выражения с разными типами данных, параметрами сортировки, точностью, масштабом или длиной объединяются оператором, характеристики результата определяются следующим образом:
- Тип данных результата определяется применением правил приоритета типов данных к типам данных входных выражений. Дополнительные сведения см. В разделе Приоритет типов данных (Transact-SQL).
- Сопоставление результата определяется правилами приоритета сопоставления, когда тип данных результата — char , varchar , text , nchar , nvarchar или ntext . Дополнительные сведения см. В разделе Приоритет сопоставления (Transact-SQL).
- Точность, масштаб и длина результата зависят от точности, масштаба и длины входных выражений.Дополнительные сведения см. В разделе «Точность, масштаб и длина (Transact-SQL)».
SQL Server предоставляет синонимы типов данных для совместимости с ISO. Дополнительные сведения см. В разделе Синонимы типов данных (Transact-SQL).
Категории типов данных
Типы данных в SQL Server разделены на следующие категории:
Строки символов Юникода
В SQL Server, в зависимости от характеристик хранилища, некоторые типы данных относятся к следующим группам:
Типы данных большого размера: varchar (max) и nvarchar (max)
Типы данных больших объектов: текст , ntext , изображение , varbinary (макс. ) и xml
Примечание
sp_help возвращает -1 как длину для типов данных большое значение и xml .
Точные числа
Приблизительные цифры
Дата и время
Строки символов
Строки символов Unicode
Бинарные строки
Другие типы данных
См. Также
CREATE PROCEDURE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
EXECUTE (Transact-SQL)
Выражения (Transact-SQL)
Функции (Transact-SQL)
LIKE (Transact-SQL)
sp_droptype (Transact-SQL)
sp_help (Transact-SQL)
sp_rename (Transact-SQL)
Точность, масштаб и длина (Transact-SQL) — SQL Server
- 000Z» data-article-date-source=»ms.date»> 22.07.2017
- 4 минуты на чтение
В этой статье
Применимо к: 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 не поддерживает следующие подтипы геометрии:
| ||
Глобальный идентификатор | 4|||
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