Содержание

Типы 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.36474 байта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 не сохраняет какие-либо сведения о валюте, связанные с символом, а хранит только числовое значение.

It is important to remember that while you can specify monetary values preceded by a currency symbol, SQL ServerSQL Server does not store any currency information associated with the symbol, it only stores the numeric value.

Преобразование данных типа moneyConverting money data

При преобразовании типа данных integer в тип money используются денежные единицы.When you convert to money from integer data types, units are assumed to be in monetary units. Например, целочисленное значение 4 преобразуется в значение типа данных

money величиной 4 денежные единицы.For example, the integer value of 4 is converted to the money equivalent of 4 monetary units.

В следующем примере выполняется преобразование значений типов 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

  • Чтение занимает 7 мин

В этой статье

Применимо к: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

Определяет дату в SQL ServerSQL Server. Defines a date in SQL ServerSQL Server.

Описание типа данных datedate description

СвойствоPropertyЗначениеValue
СинтаксисSyntaxdatedate
ИспользованиеUsageDECLARE @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)

От 1 января 1 года до 31 декабря 9999 года нашей эры (от 15 октября 1582 года до 31 декабря 9999 года для Informatica). January 1, 1 CE (Common Era) through December 31, 9999 CE (October 15, 1582 CE through December 31, 9999 CE 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.

ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12.MM is two digits from 01 to 12 that represent a month in the specified year.

ДД обозначает две цифры, представляющие день указанного месяца и принимающие значения от 01 до 31 в зависимости от месяца.DD is two digits from 01 to 31, depending on the month, that represents a day of the specified month.

Длина в символахCharacter length10 позиций10 positions
Точность, масштабPrecision, scale10, 010, 0
Объем памятиStorage size3 байта, фиксированный3 bytes, fixed
Структура хранилищаStorage structureДата хранится в одной переменной типа integer размером 1 или 3 байта. 1, 3-byte integer stores date.
ТочностьAccuracyОдин деньOne day
Значение по умолчаниюDefault value1900-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.
— Обозначение «мм» состоит из двух цифр, представляющих дополнительное смещение часового пояса в минутах, и принимает значения от 0 до 59.- MM is two digits, ranging from 0 to 59, that represent the number of additional minutes in the time zone offset.
— + (плюс) или – (минус) представляет собой обязательный знак смещения часового пояса.- + (plus) or — (minus) the mandatory sign of the time zone offset. Данный знак указывает, добавляется или вычитается смещение часового пояса от времени в формате UTC, чтобы получить локальное время.This sign indicates that, to obtain the local time, the time zone offset is added or subtracted from the Coordinated Universal Times (UTC) time. Допустимый диапазон смещения часового пояса: от -14:00 до +14:00.The valid range of time zone offset is from -14:00 to +14:00.

Соответствие стандартам 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 clientODBC низкого уровняDown-level ODBCOLEDB низкого уровняDown-level OLEDBJDBC низкого уровняDown-level JDBCSQLCLIENT низкого уровняDown-level SQLCLIENT
timetimeчч:мм:сс[.ннннннн]hh:mm:ss[.nnnnnnn]SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHARDBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STRJava. sql.StringJava.sql.StringString или SqStringString or SqString
datedateГГГГ-ММ-ДДYYYY-MM-DDSQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHARDBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STRJava.sql.StringJava.sql.StringString или SqStringString or SqString
datetime2datetime2ГГГГ-ММ-ДД чч:мм:сс[.ннннннн]YYYY-MM-DD hh:mm:ss[.nnnnnnn]SQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHARDBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STRJava.sql.StringJava.sql.StringString или SqStringString or SqString
datetimeoffsetdatetimeoffsetГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:ммYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmSQL_WVARCHAR или SQL_VARCHARSQL_WVARCHAR or SQL_VARCHARDBTYPE_WSTR или DBTYPE_STRDBTYPE_WSTRor DBTYPE_STRJava. sql.StringJava.sql.StringString или 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 literaldatedate
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
timetime12:35:29.12:35:29. 12345671234567
datedate2007-05-082007-05-08
smalldatetimesmalldatetime2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime22007-05-08 12:35:29.12345672007-05-08 12:35:29.1234567
datetimeoffsetdatetimeoffset2007-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 не поддерживает следующие подтипы геометрии:

  • CircularString
  • CompoundCurve
  • CurvePolygon
  • GeometryCollection

Вы не можете создавать в 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 data4 байта + количество символов
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 до 2551 byte
smallintПозволяет целые числа между -32 768 и 32 7672 bytes
intПозволяет целые числа между -2 147 483 648 и 2 147 483 6474 bytes
bigintПозволяет целые числа между -9223372036854775808 и 9 223 372 036 854 775 8078 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,36474 bytes
moneyДенежные данные от-922 337 203 685 477,5808 до 922 337 203 685 477,58078 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 декабря 99993 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 символов максимум 
MemoMEMO используется для больших объемов текста. Хранит до 65 536 символов. Примечание: Поле MEMO нельзя сортировать. Тем не менее, они доступны для поиска 
ByteПозволяет целые числа от 0 до 2551 byte
IntegerПозволяет целые числа между-32 768 и 32 7672 bytes
LongПозволяет целые числа между-2 147 483 648 и 2 147 483 6474 bytes
SingleОдинарная точность с плавающей запятой. Будет обрабатывать большинство десятичных знаков4 bytes
DoubleДвойная точность с плавающей запятой. Будет обрабатывать большинство десятичных знаков8 bytes
CurrencyИспользовать для валюты. Вмещает до 15 цифр целых долларов, плюс 4 десятичных знака. Совет: Вы можете выбрать валюту страны для использования8 bytes
AutoNumberПоля автонумерации автоматически дают каждой записи свой номер, обычно начиная с 14 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 байт в зависимости от количества чисел после запятой.
  • Данный тип может принимать два параметра precision и scale: DECIMAL(precision, scale).

    Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 38. По умолчанию оно равно 18.

    Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.

  • 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 байт в зависимости от дробной части.
  • Может иметь форму опредеения в виде FLOAT(n), где n представляет число бит, которые используются для хранения десятичной части числа (мантиссы). По умолчанию n = 53.

  • REAL: хранит числа от –340E+38 to 3.40E+38. Занимает 4 байта. Эквивалентен типу FLOAT(24).

Примеры числовых столбцов:

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 байт.
  • Может иметь форму TIME(n), где n представляет количество цифр от 0 до 7 в дробной части секунд.

  • 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 байт в зависимости от точности времени.
  • Может иметь форму DATETIME2(n), где n представляет количество цифр от 0 до 7 в дробной части секунд.

  • SMALLDATETIME: хранит даты и время в диапазоне от 01/01/1900 до 06/06/2079, то есть ближайшие даты. Занимает от 4 байта.
  • DATETIMEOFFSET: хранит даты и время в диапазоне от 0001-01-01 до 9999-12-31. Сохраняет детальную информацию о времени с точностью до 100 наносекунд. Занимает 10 байт.

Распространенные форматы дат:

  • yyyy-mm-dd — 2017-07-12
  • dd/mm/yyyy — 12/07/2017
  • mm-dd-yy — 07-12-17
  • В таком формате двузначные числа от 00 до 49 воспринимаются как даты в диапазоне 2000-2049. А числа от 50 до 90 как диапазон чисел 1950 — 1999.

  • Month dd, yyyy — July 12, 2017

Распространенные форматы времени:

  • 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.
  • Количество символов, которое может хранить столбец, передается в скобках. Например, для столбца с типом CHAR(10) будет выделено 10 байт. И если мы сохраним в столбце строку менее 10 символов, то она будет дополнена пробелами.

  • VARCHAR: хранит строку. На каждый символ выделяется 1 байт. Можно указать конкретную длину для столбца — от 1 до 8 000 символов, например, VARCHAR(10). Если строка должна иметь больше 8000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб: VARCHAR(MAX).
  • Не подходит для многих языков, так как хранит символы не в кодировке Unicode.

    В отличие от типа CHAR если в столбец с типом VARCHAR(10) будет сохранена строка в 5 символов, то в столце будет сохранено именно пять символов.

  • NCHAR: хранит строку в кодировке Unicode длиной от 1 до 4 000 символов. На каждый символ выделяется 2 байта. Например, NCHAR(15)
  • NVARCHAR: хранит строку в кодировке Unicode. 31–1 байт при использовании значения MAX (VARBINARY(MAX)).

Еще один бинарный тип — тип 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

  • 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) , поэтому дробная часть может быть округлена, чтобы соответствовать полученному масштабу.

В операциях умножения и деления нам нужно точек точности - масштабирование мест для хранения неотъемлемой части результата. Масштаб можно уменьшить, используя следующие правила:

  1. Результирующая шкала уменьшается до мин (шкала, 38 - (шкала точности)) , если целая часть меньше 32, потому что она не может быть больше 38 - (шкала точности) . В этом случае результат может быть округлен.
  2. Масштаб не изменится, если он меньше 6 и если целая часть больше 32. В этом случае может возникнуть ошибка переполнения, если он не помещается в десятичный (38, масштаб)
  3. Масштаб будет установлен на 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.

Я рекомендую создать следующие ключи кластеризации:

  1. Узкий . Это экономит место.
  2. Уникальный . Ключ кластеризации не должен повторяться.
  3. Статический . Ключ для данной записи всегда должен оставаться неизменным.
  4. Постоянно растущий . Если ключ кластеризации постоянно увеличивается, активная точка находится в конце последовательности ключей кластеризации, поэтому разделение страниц не происходит в середине последовательности.

Автоинкремент целых чисел и автоинкремент больших целых чисел соответствуют этим четырем критериям.

У некоторых команд возникает соблазн использовать 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 установлен флаг
Тип источника MySQL Тип Комментарий
ИНТ ИНТ
TINYINT TINYINT 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. В последнем столбце при необходимости представлена ​​дополнительная информация.

4 уникальный 9085 geometry поддерживается только в базах данных

Типы данных 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

Глобальный идентификатор

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

.