Разное

Ms sql tinyint: Числовые типы — SQL Server

Содержание

Числовые типы — SQL Server



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


    • M


    • o


    • O

В этой статье

Применимо к: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 поддерживает перечисленные ниже числовые типы.supports the following numeric types.

Содержание разделаIn this section

bit (Transact-SQL)bit (Transact-SQL)
decimal и numeric (Transact-SQL)decimal and numeric (Transact-SQL)
Типы данных float и real (Transact-SQL)float and real (Transact-SQL)
int, bigint, smallint и tinyint (Transact-SQL)int, bigint, smallint, and tinyint (Transact-SQL)
Типы money и smallmoney (Transact-SQL)money and smallmoney (Transact-SQL)



Типы данных Microsoft SQL Server

Полный список всех типов данных в Microsoft SQL Server

Заголовки:

Источники

Приоритет типов данных (Transact-SQL)

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

В SQL Server используется следующий приоритет типов данных:

  1. sql_variant
  2. xml
  3. datetimeoffset
  4. datetime2
  5. datetime
  6. smalldatetime
  7. date
  8. time
  9. float
  10. real
  11. decimal
  12. money
  13. smallmoney
  14. bigint
  15. int
  16. smallint
  17. tinyint
  18. bit
  19. ntext
  20. text
  21. image
  22. timestamp
  23. uniqueidentifier
  24. nvarchar (including nvarchar(max) )
  25. nchar
  26. varchar (including varchar(max) )
  27. char
  28. varbinary (including varbinary(max) )
  29. binary (lowest)

Синонимы типов данных (Transact-SQL)

Синонимы типов данных включены в SQL Server ради совместимости со спецификацией ISO.
Эти синонимы и соответствующие им системные типы данных SQL Server приведены в следующей таблице.

СинонимСистемный тип данных SQL Server
Binary varyingvarbinary
char varyingvarchar
characterchar
characterchar(1)
character(n)char(n)
character varying(n)varchar(n)
Decdecimal
Double precisionfloat
float[(n)] for n = 1-7real
float[(n)] for n = 8-15float
integerint
national character(n)nchar(n)
national char(n)nchar(n)
national character varying(n)nvarchar(n)
national char varying(n)nvarchar(n)
national textntext
timestamprowversion

Синонимы типов данных можно использовать вместо соответствующих базовых типов данных в инструкциях языка определения данных (data definition language, DDL),
таких как CREATE TABLE, CREATE PROCEDURE или DECLARE @variable. Однако после создания объекта синонимы утрачивают силу.
При создании объекта ему назначается базовый тип данных, связанный с синонимом.
Никаких признаков того, что в инструкции, создавшей объект, был указан синоним, не остается.

Всем объектам, производным от первоначального объекта, таким, как столбцы результирующего набора или выражения, назначается базовый тип данных.
Все последующие вызовы функций работы с метаданными, выполняемые для первоначального объекта и любых производных от него объектов, сообщают базовый тип данных,
а не синоним. Это имеет место при работе с метаданными, например в процедуре sp_help и других системных хранимых процедурах, представлениях информационных схем и различных API-операции над метаданными, сообщающих типы данных столбцов таблицы или результирующего набора.

Точность, масштаб и длина (Transact-SQL)

Точность представляет собой количество цифр в числе. Масштаб представляет собой количество цифр справа от десятичной запятой в числе. Например: число 123,45 имеет точность 5 и масштаб 2.

В среде SQL Server максимальная точность типов данных numeric и decimal по умолчанию составляет 38 разрядов. В более ранних версиях SQL Server максимум по умолчанию составляет 28.

Длиной для числовых типов данных является количество байт, используемых для хранения числа. Длина символьной строки или данных в Юникоде равняется количеству символов. Длина для типов данных binary, varbinary и image равна количеству байт. Например, тип данных int может содержать 10 разрядов, храниться в 4 байтах и не должен содержать десятичный разделитель. Тип данных int имеет точность 10, длину 4 и масштаб 0.

При сцеплении двух выражений типа char, varchar, binary или varbinary длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 8 000 символов.

При сцеплении двух выражений типа nchar или nvarchar длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 4 000 символов.

Если два выражения одного и того же типа данных, но разной длины, сравниваются с помощью предложения UNION, EXCEPT или INTERSECT, длина результата будет равняться длине максимального из двух выражений.

Точность и масштаб числовых типов данных, кроме decimal, фиксированы. Если арифметический оператор объединяет два выражения одного и того же типа, результат будет иметь тот же тип данных с точностью и масштабом, определенными для этого типа. Если оператор объединяет два выражения с различными числовыми типами данных, тип данных результата будет определяться правилами старшинства типов данных. Результат имеет точность и масштаб, определенные для этого типа данных.

Следующая таблица определяет, как вычисляется точность и масштаб результата, если результат операции имеет тип decimal. Результат имеет тип decimal, если одно из следующих утверждений является истиной:

  • Оба выражения имеют тип decimal.
  • Одно выражение имеет тип decimal, а другое имеет тип данных со старшинством меньше, чем decimal.

Выражения операндов обозначены как выражение e1 с точностью p1 и масштабом s1 и выражение e2 с точностью p2 и масштабом s2. Точность и масштаб для любого выражения, отличного от decimal, соответствуют типу данных этого выражения

ОперацияТочность результатаМасштаб результата *
e1 + e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 — e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 * e2p1 + p2 + 1s1 + s2
e1 / e2p1 — s1 + s2 + max(6, s1 + p2 + 1)max(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2max(s1, s2) + max(p1-s1, p2-s2)max(s1, s2)
e1 % e2min(p1-s1, p2 -s2) + max( s1,s2 )max(s1, s2)

* Точность и масштаб результата имеют абсолютный максимум, равный 38. Если значение точности превышает 38, то соответствующее значение масштаба уменьшается, чтобы по возможности предотвратить усечение целой части результата.

SQL Server, SSIS и Biml типы данных

Таблица ниже является упрощенной схемой связи между типами данныхSQL Server, SSIS и Biml.
Таблица не включает все возможные комбинации и все виды типов данных, но полезна как быстрая ссылка при разработке и изучении Biml.

SQL ServerSSIS VariablesSSIS Pipeline BufferOLE DBADO.NETBiml
bigintInt64DT_I8LARGE_INTEGERInt64Int64
binaryObjectDT_BYTESBinaryBinary
bitBooleanDT_BOOLVARIANT_BOOLBooleanBoolean
charStringDT_STRVARCHARStringFixedLengthAnsiStringFixedLength
dateObjectDT_DBDATEDBDATEDateDate
datetimeDateTimeDT_DBTIMESTAMPDATEDateTimeDateTime
datetime2ObjectDT_DBTIMESTAMP2DBTIME2DateTime2DateTime2
datetimeoffsetObjectDT_DBTIMESTAMPOFFSETDBTIMESTAMPOFFSETDateTimeOffsetDateTimeOffset
decimalDecimalDT_NUMERICNUMERICDecimalDecimal
floatDoubleDT_R8FLOATDoubleDouble
geographyDT_IMAGEObjectObject
geometryDT_IMAGEObjectObject
hierarchyidDT_BYTESObjectObject
image (*)ObjectDT_IMAGEBinaryBinary
intInt32DT_I4LONGInt32Int32
moneyObjectDT_CY, DT_NUMERICCURRENCYCurrencyCurrency
ncharStringDT_WSTRNVARCHARStringFixedLengthStringFixedLength
ntext (*)StringDT_NTEXTStringString
numericDecimalDT_NUMERICNUMERICDecimalDecimal
nvarcharStringDT_WSTRNVARCHARStringString
nvarchar(max)ObjectDT_NTEXTString
realSingleDT_R4FLOAT, DOUBLESingleSingle
rowversionObjectDT_BYTESBinaryBinary
smalldatetimeDateTimeDT_DBTIMESTAMPDATEDateTimeDateTime
smallintInt16DT_I2SHORTInt16Int16
smallmoneyObjectDT_CY, DT_NUMERICCURRENCYCurrencyCurrency
sql_variantObjectDT_WSTR, DT_NTEXTObjectObject
tableObject
text (*)ObjectDT_TEXTAnsiString
timeObjectDT_DBTIME2DBTIME2TimeTime
timestamp (*)ObjectDT_BYTESBinaryBinary
tinyintByteDT_UI1BYTEByteByte
uniqueidentifierString, ObjectDT_GUIDGUIDGuidGuid
varbinaryObjectDT_BYTESBinaryBinary
varbinary(max)ObjectDT_IMAGEBinaryBinary
varcharStringDT_STRVARCHARStringAnsiString
varchar(max)ObjectDT_TEXTAnsiString
xmlObjectDT_NTEXTXml

(* Данные типы данных будут удалены в будущих версиях SQL Server. 31 — 1)n + 2Other Data TypescursorOther Data Typessql_variantmax 8016Other Data Typeshierarchyidmax 892Other Data Typesrowversion8Other Data Typestimestamp(*)Other Data Typesuniqueidentifier16Other Data Typesxmlmax 2GbOther Data TypestableSpatial Data TypesgeometrySpatial Data Typesgeography

SQL Server to MySQL, Oracle, PostgreSQL, SQLite Data Type Mapping

General TypeTypeMySQLOraclePostgreSQLSQLite
Exact NumericsbitTINYINT(1)NUMBER(3)BOOLEANINTEGER
Exact NumericstinyintTINYINT(signed)NUMBER(3)SMALLINTINTEGER
Exact NumericssmallintSMALLINTNUMBER(5)SMALLINTINTEGER
Exact NumericsintMEDIUMINT, INTNUMBER(10)INTINTEGER
Exact NumericsbigintBIGINTNUMBER(19)BIGINTINTEGER
Exact NumericsdecimalDECIMALNUMBER(p[,s])DECIMAL(p,s)REAL
Exact NumericssmallmoneyDOUBLENUMBER(10,4)MONEYREAL
Exact NumericsmoneyDOUBLENUMBER(19,4)MONEYREAL
Approximate NumericsfloatFLOAT
DOUBLE; REAL
FLOAT(49)DOUBLE PRECISIONREAL
Date and TimedateDATEDATETEXT
Date and TimesmalldatetimeTIMESTAMPDATETIMESTAMP(0)TEXT
Date and TimetimeTIMETIMETEXT
Date and Timedatetime2DDATETIMETIMESTAMPTEXT
Date and TimedatetimeDATETIMESTAMP(3)TEXT
Date and timedatetimeoffsetTIMESTAMP
with time zone
TEXT
Caracter StringscharCHARCHARCHARTEXT
Caracter StringsvarcharVARCHARVARCHAR2VARCHARTEXT
Caracter Stringsvarchar(max)VARCHAR2TEXTTEXT
Caracter StringsncharNCHARNCHARTEXT
Caracter StringsnvarcharNCHARVARCHARTEXT
Caracter Stringsnvarchar(max)VARCHAR
TINYTEXT
TEXT(M)
MEDIUMTEXT
LONGTEXT
NCHARTEXTTEXT
Caracter Stringsntext(*)LONGTEXTTEXT
Caracter Stringstext(*)LONGTEXTTEXT
Binary Stringsimage(*)LONGBLOBLONG RAWBYTEABLOB
Binary StringsbinaryBINARYRAWBYTEABLOB
Binary StringsvarbinaryRAWBYTEABLOB
Binary Stringsvarbinary(max)VARBINARY(M)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
RAWBYTEABLOB
Other Data TypescursorTEXT
Other Data Typessql_variantBLOBTEXT
Other Data TypeshierarchyidTEXT
Other Data TypesrowversionBYTEATEXT
Other Data Typestimestamp(*)RAWBYTEATEXT
Other Data TypesuniqueidentifierCHARCHAR(36)CHAR(16)TEXT
Other Data TypesxmlXMLTEXT
Other Data Typestable
Spatial Data TypesgeometryVARCHARTEXT
Spatial Data TypesgeographyVARCHARTEXT

(* Данные типы данных будут удалены в будущих версиях SQL Server. 15-1 (32,767)2 Bytestinyint0 to 2551 Byte

The int data type is the primary integer data type in SQL Server. The bigint data type is intended for use when integer values might exceed the range that is supported by the int data type.

bigint fits between smallmoney and int in the data type precedence chart.

Functions return bigint only if the parameter expression is a bigint data type. SQL Server does not automatically promote other integer data types (tinyint, smallint, and int) to bigint.

When you use the +, -, *, /, or % arithmetic operators to perform implicit or explicit conversion of int, smallint, tinyint, or bigint constant values to the float, real, decimal or numeric data types, the rules that SQL Server applies when it calculates the data type and precision of the expression results differ depending on whether the query is autoparameterized or not.

Therefore, similar expressions in queries can sometimes produce different results. When a query is not autoparameterized, the constant value is first converted to numeric, whose precision is just large enough to hold the value of the constant, before converting to the specified data type. For example, the constant value 1 is converted to numeric (1, 0), and the constant value 250 is converted to numeric (3, 0).

When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. When the / operator is involved, not only can the result type’s precision differ among similar queries, but the result value can differ also. For example, the result value of an autoparameterized query that includes the expression SELECT CAST (1.0 / 7 AS float) , differs from the result value of the same query that is not autoparameterized, because the results of the autoparameterized query, are truncated to fit into the numeric (10, 0) data type.

Converting integer data

When integers are implicitly converted to a character data type, if the integer is too large to fit into the character field, SQL Server enters ASCII character 42, the asterisk (*).

Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. The following example shows that when the threshold value is exceeded, the data type of the result changes from an int to a decimal.

Here is the result set.

Examples

The following example creates a table using the bigint, int, smallint, and tinyint data types. Values are inserted into each column and returned in the SELECT statement.

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Типы точных числовых данных, использующие целые значения. Exact-number data types that use integer data. Для экономии места в базе данных используйте тип данных наименьшего размера, который гарантирует возможность хранения всех возможных значений. To save space in the database, use the smallest data type that can reliably contain all possible values. Например, типа tinyint достаточно для хранения возраста людей, так как он не может превышать 255 лет. For example, tinyint would be sufficient for a person’s age because no one lives to be more than 255 years old. Однако типа tinyint будет недостаточно для возраста зданий, так как они могут быть старше 255 лет. 15-1 (32,767)2 байта 2 Bytestinyint tinyintОт 0 до 255 0 to 2551 байт 1 Byte

Тип данных int является основным типом целочисленных данных в SQL Server SQL Server . The int data type is the primary integer data type in SQL Server SQL Server . Тип данных bigint используется для хранения значений, выходящих за диапазон, поддерживаемый типом данных int. The bigint data type is intended for use when integer values might exceed the range that is supported by the int data type.

В таблице приоритетов типов данных тип bigint располагается между smallmoney и int. bigint fits between smallmoney and int in the data type precedence chart.

Функции возвращают bigint только в случае, если выражение параметра имеет тип bigint. Functions return bigint only if the parameter expression is a bigint data type. SQL Server SQL Server не выполняет автоматического продвижения других целочисленных типов данных (tinyint, smallint и int) до bigint. does not automatically promote other integer data types (tinyint, smallint, and int) to bigint.

При использовании таких арифметических операторов, как +, –, *, / или %, для явного или неявного преобразования констант типа int, smallint, tinyint или bigint в значения типа float, real, decimal или numeric в SQL Server SQL Server используются различные правила определения типов данных и точности результата, зависящие от наличия автоматической параметризации запроса. When you use the +, -, *, /, or % arithmetic operators to perform implicit or explicit conversion of int, smallint, tinyint, or bigint constant values to the float, real, decimal or numeric data types, the rules that SQL Server SQL Server applies when it calculates the data type and precision of the expression results differ depending on whether the query is autoparameterized or not.

Поэтому одинаковые выражения в различных запросах могут иногда возвращать различные результаты. Therefore, similar expressions in queries can sometimes produce different results. В случае отсутствия в запросе автоматической параметризации константа сначала преобразуется в значение типа numeric, точности которого хватает для ее хранения, а затем происходит преобразование в заданный тип данных. When a query is not autoparameterized, the constant value is first converted to numeric, whose precision is just large enough to hold the value of the constant, before converting to the specified data type. Например, константа 1 преобразуется в numeric (1, 0) , а константа 250 — в numeric (3, 0) . For example, the constant value 1 is converted to numeric (1, 0), and the constant value 250 is converted to numeric (3, 0).

При наличии в запросе автоматической параметризации константа всегда сначала преобразуется в значение типа numeric (10, 0) , а затем в данные конечного типа. When a query is autoparameterized, the constant value is always converted to numeric (10, 0) before converting to the final data type. При использовании оператора «/» могут различаться как точность, так и само значение результата. When the / operator is involved, not only can the result type’s precision differ among similar queries, but the result value can differ also. Например, результат автопараметризованного запроса, включающего в себя выражение SELECT CAST (1.0 / 7 AS float) , отличается от аналогичного запроса без автоматической параметризации, так как результаты выполнения автопараметризованного запроса усекаются до значений, соответствующих типу данных numeric (10, 0) . For example, the result value of an autoparameterized query that includes the expression SELECT CAST (1.0 / 7 AS float) , differs from the result value of the same query that is not autoparameterized, because the results of the autoparameterized query, are truncated to fit into the numeric (10, 0) data type.

Преобразование целочисленных данных Converting integer data

При неявном преобразовании данных типа integer в данные типа character, если число слишком большое для символьного поля, SQL Server SQL Server вставляет символ с кодом ASCII 42 — звездочку (*). When integers are implicitly converted to a character data type, if the integer is too large to fit into the character field, SQL Server SQL Server enters ASCII character 42, the asterisk (*).

Целочисленные константы, превышающие 2 147 483 647, преобразуются в тип данных decimal, а не в bigint. Integer constants greater than 2,147,483,647 are converted to the decimal data type, not the bigint data type. В приведенном ниже примере демонстрируется изменение типа данных результата с int на decimal при превышении порогового значения. The following example shows that when the threshold value is exceeded, the data type of the result changes from an int to a decimal.

Ниже приводится результирующий набор. Here is the result set.

Примеры Examples

В приведенном ниже примере создается таблица, в которой используются типы данных bigint, int, smallint и tinyint. 15-1 (32 767)2 байтаtinyintОт 0 до 2551 байт

Int тип данных является основным типом целочисленных данных в SQL Server. Bigint тип данных предназначен для использования, когда целочисленные значения могут превышать диапазон, поддерживаемый int тип данных.

bigint располагается между smallmoney и int в таблице приоритетов типов данных.

Функции возвращают bigint только в том случае, если выражение параметра имеет bigint тип данных. SQL Serverне выполняет автоматического продвижения других целочисленных типов данных (tinyint, smallint, и int) для bigint.

При использовании +, -, *, /, или арифметические операторы % для явного или неявного преобразования int, smallint, tinyint, или bigint постоянных значений float, реальные, десятичное или числовое типы данных, правила, SQL Server применяется при вычислении, тип данных и точности результатов выражения различаются в зависимости от того, является ли запрос автоматической параметризации или нет.

Поэтому одинаковые выражения в различных запросах могут иногда возвращать различные результаты. При отсутствии в запросе автоматической параметризации, константа сначала преобразуется в числовое, с точностью достаточен для хранения значения константы, перед преобразованием в указанный тип данных. Например, константа 1 преобразуется в numeric (1, 0), а константа 250 — в numeric (3, 0).

При запросе автоматической параметризации константа всегда преобразуется в numeric (10, 0) перед преобразованием в данные конечного типа. При использовании оператора «/» могут различаться как точность, так и само значение результата. Например, результат автопараметризованного запроса, включающего в себя выражение SELECT CAST (1.0 / 7 AS float) будет отличаться от результирующее значение того же запроса без автоматической параметризации, так как результаты автоматической параметризации запроса будет усекаются до numeric (10, 0) тип данных.

При неявном преобразовании данных типа integer в данные типа character, если число слишком большое для символьного поля, SQL Server вставляет символ с кодом ASCII 42 — звездочку (*).

Целочисленные константы, превышающее 2 147 483 647, преобразуются в десятичное тип данных, не bigint тип данных. В следующем примере показано, если превышено пороговое значение, тип данных результата меняется с int для десятичное.

Ниже приводится результирующий набор.

В следующем примере создается таблица, использующая bigint, int, smallint, и tinyint типов данных. Значения вставляются в каждый столбец и возвращаются в инструкции SELECT.

Создание таблиц базы данных db_sales

Таблица tbl_educ



Таблица содержит список
возможных образовательных уровней. Каждой записи присваивается
уникальный код
(поле-счетчик ed_code). Поле ed_code выбирается в качестве первичного
ключа.


MS SQL:
CREATE
TABLE tbl_educ


(ed_code tinyint
NOT NULL IDENTITY PRIMARY KEY,


educ varchar(45) NOT NULL)


MySQL:


CREATE
TABLE tbl_educ


(ed_code tinyint UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,


educ varchar(45) NOT NULL)


TYPE=InnoDB


Таблица tbl_clients


Содержит личные данные клиента. В качестве
первичного ключа указано поле client_id
(код клиента). Поле ed_code определено
как внешний ключ для связи с таблицей tbl_educ.


MS SQL:


CREATE
TABLE tbl_clients (


client_id char(4) NOT NULL PRIMARY KEY,


name varchar(45),



lastname varchar(45),


dbirth date,


sex char(1),


ed_code tinyint,


addr
varchar(45),


phone char(9) NOT NULL,

CONSTRAINT
FOREIGN KEY (ed_code) REFERENCES tbl_educ
(ed_code)
ON DELETE SET NULL ON UPDATE CASCADE)


MySQL:


CREATE
TABLE tbl_clients (


client_id char(4) NOT NULL PRIMARY KEY,


name varchar(45),



lastname varchar(45),


dbirth date,


sex char(1),


ed_code tinyint UNSIGNED,


addr
varchar(45)


phone char(9) NOT NULL,


FOREIGN KEY (ed_code) REFERENCES tbl_educ
(ed_code)
ON DELETE SET NULL ON UPDATE CASCADE)


TYPE=InnoDB; 


Таблица tbl_product


Содержит
сведения о товарах. В
качестве первичного ключа определено поле, содержащее код товара
(prod_id).


MS SQL:
CREATE
TABLE tbl_product


(prod_id int NOT NULL
PRIMARY KEY,


pr_name varchar(100),


price float(6,2))




MySQL
:
CREATE
TABLE tbl_product (


prod_id int UNSIGNED NOT NULL
PRIMARY KEY,


pr_name varchar(100), price float(6,2))
TYPE=InnoDB ;


Таблица tbl_sale


Содержит данные о продажах, включая
дату продажи и проданного товара для каждой такой транзакции. Каждой
совершаемой
продаже присваивается уникальный код (поле-счетчик ),
которое используется в качестве первичного ключа. Для связи с таблицами
tbl_product и tbl_clients определяются внешние ключи( поля ,
соответственно)


MS SQL:
CREATE
TABLE tbl_sales (


sale_id int NOT NULL IDENTITY PRIMARY KEY,


client_id
char(4) NOT NULL,


prod_id int NOT NULL,


amount tinyint
NOT NULL,


saledate date NOT NULL,

CONSTRAINT
FOREIGN KEY (client_id) REFERENCES tbl_clients (client_id) ON UPDATE
CASCADE ON DELETE NO ACTION,
FOREIGN
KEY (prod_id) REFERENCES tbl_product (prod_id) ON UPDATE CASCADE ON
DELETE NO ACTION


MySQL:
CREATE
TABLE tbl_sales (


sale_id int UNSINED NOT NULL AUTO_INCREMENT PRIMARY KEY,


client_id
char(4) NOT NULL,


prod_id int UNSIGNED NOT NULL,


amount tinyint UNSIGNED
NOT NULL,


saledate date NOT NULL,


FOREIGN KEY (client_id) REFERENCES tbl_clients (client_id) ON UPDATE
CASCADE ON DELETE NO ACTION


FOREIGN
KEY (prod_id) REFERENCES tbl_product (prod_id) ON UPDATE CASCADE ON
DELETE NO ACTION)


TYPE=InnoDB;

 

Числовые типы — SQL Server

  • 2 минуты на чтение
    • M

    • j

    • c

    • M

    • м

    • +3

В этой статье

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Хранилище параллельных данных

SQL Server поддерживает следующие числовые типы .

В этом разделе

бит (Transact-SQL)
десятичный и числовой (Transact-SQL)
вещественный и вещественный (Transact-SQL)
int, bigint, smallint и tinyint (Transact-SQL)
money and smallmoney (Transact-SQL)

Эта страница полезна?

да

Нет

Любой дополнительный отзыв?

Пропускать
Представлять на рассмотрение

Спасибо.

Тема

  • Свет

  • Темно

  • Высокий контраст

  • Документы предыдущей версии
  • Блог
  • Внести вклад
  • Конфиденциальность и файлы cookie
  • Условия использования
  • Товарные знаки
  • © Microsoft 2021

Разница между типом данных TINYINT и INT в Sql Server

И TINYINT, и INT являются точными числовыми типами данных, используемыми для хранения целочисленных данных.31-1) Пример использования

ОБЪЯВИТЬ @i TINYINT
УСТАНОВИТЬ @i = 150
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:
150

ОБЪЯВИТЬ @i INT
УСТАНОВИТЬ @i = 150
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:
150

Пример размера хранилища, используемого переменной для хранения значения
ОБЪЯВИТЬ @i TINYINT
УСТАНОВИТЬ @i = 150
ПЕЧАТЬ ДАННЫХ (@i)
 

РЕЗУЛЬТАТ:
1

ОБЪЯВИТЬ @i INT
УСТАНОВИТЬ @i = 150
ПЕЧАТЬ ДАННЫХ (@i)
 

РЕЗУЛЬТАТ:
4

Пример значения TINYINT вне диапазона
ОБЪЯВИТЬ @i TINYINT
УСТАНОВИТЬ @i = 260
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:

Msg 220, уровень 16, состояние 2, строка 2
Ошибка арифметического переполнения для типа данных tinyint, значение = 260.

ОБЪЯВИТЬ @i INT
УСТАНОВИТЬ @i = 260
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:
260

Попытаться сохранить Отрицательное значение
ОБЪЯВИТЬ @i TINYINT
УСТАНОВИТЬ @i = -150
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:

Msg 220, уровень 16, состояние 2, строка 2
Ошибка арифметического переполнения для типа данных tinyint, значение = -150.

ОБЪЯВИТЬ @i INT
УСТАНОВИТЬ @i = -150
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:
-150

Пример значений TINYINT и INT вне диапазона
ОБЪЯВИТЬ @i TINYINT
НАБОР @i = 2147483649
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:

Сообщение 8115, уровень 16, состояние 2, строка 2
Ошибка арифметического переполнения при преобразовании выражения в тип данных tinyint.

ОБЪЯВИТЬ @i INT
НАБОР @i = 2147483649
ПЕЧАТЬ @i
 

РЕЗУЛЬТАТ:

Msg 8115, уровень 16, состояние 2, строка 2
Ошибка арифметического переполнения при преобразовании выражения в тип данных int.

[ТАКЖЕ ПРОЧИТАЙТЕ] SMALLINT Vs INT

Выбор правильного типа данных при создании таблицы очень важен. Неправильный выбор типа данных приведет к проблемам с производительностью и хранением со временем по мере роста данных.Поскольку неправильный выбор типа данных приводит к тому, что требуется больше места для хранения, и нет. записей, хранящихся на каждой странице данных, будет меньше. И, кроме того, если индекс создается для таких столбцов, он не только занимает дополнительное место для хранения значения в строке на странице данных, но также требует дополнительного места в индексе. Меньше нет. записей, хранящихся на странице данных, то для обслуживания запросов сервер Sql не должен загружать больше. страниц данных в память. Например: для столбца таблицы, в котором хранится state_id, выбор типа данных INT вместо столбца TINYINT или SMALLINT неэффективен, поскольку количество штатов в стране в худшем случае также никогда не превышает трехзначное число.Итак, для столбца state_id, если мы выберем тип данных INT, тогда для его хранения всегда потребуется 4 байта, независимо от хранимого в нем значения. Тогда как TINYINT занял бы 1 байт для хранения того же значения, а SMALLINT — 2 байта. Поэтому очень важно выбрать правильный тип данных при создании таблицы. Надеюсь, что указанные выше различия помогут вам выбрать правильный тип данных при создании таблицы.

ТАКЖЕ ПРОЧИТАЙТЕ

select — Лучший способ сохранить «подписанный» TINYINT на MS SQL Server?

Мне нужно сохранить значение между –255 и 255 на SQL Server.Я ищу самый быстрый способ ВЫБРАТЬ этих значений в большой таблице (+5 000 000 строк), и каждая миллисекунда на счету. Предположим, структура, индексы и запросы уже правильно спроектированы.

Я знаю, что могу использовать SMALLINT , который использует 2 байта и подписан реализацией. Но поскольку моя основная цель — производительность SELECT , я подумал об использовании поля TINYINT для необработанного значения и поля BIT для обозначения значения как отрицательного или положительного.Но мой опыт низкого уровня C заставляет меня думать, что BIT фактически использует 1 байт для хранения и / или обработки. После прочтения ответа здесь (TINYINT против производительности Nullable BIT в MS SQL Server) мои подозрения оказались правильными.

Итак, чтобы подвести итог и лучше определить «ЛУЧШИЙ» в названии, мои вопросы:

  1. При использовании парных полей TINYINT и BIT будет использоваться / process
    2 байта или 1 байт + 1 бит, когда ВЫБИРАЕТ ? Я не спрашиваю о
    хранилище, так как даже на большом столе разница будет незначительной
    (поправьте меня, если я ошибаюсь).

  2. Если поле BIT использует 1 байт при выполнении процесса SELECT ,
    будет какое-либо увеличение производительности между ВЫБОР 2 байта
    TINYINT и BIT пара против SMALLINT , который уже использует
    2 байта и подписано реализацией?

  3. Если ДА, и действительно есть прирост производительности при использовании
    TINYINT и пара BIT , можно точно измерить
    оценить, стоит ли выигрыш в производительности громоздкого использования
    пара TINYINT и BIT , в отличие от лучшего дизайна использования
    просто SMALLINT ?


ПРИМЕЧАНИЕ 1. Сервер — это Microsoft SQL Server 2019 Datacenter
ПРИМЕЧАНИЕ 2. Вопрос заключается в выборе этих значений SQL Server.Он не будет использоваться ни в какой агрегации, WHERE или любой другой операции на SQL Server.
ПРИМЕЧАНИЕ 3. Значение не будет использоваться в качестве ключа ИНДЕКСА. Он будет ВКЛЮЧЕН только в соответствующий индекс / индексы.
ПРИМЕЧАНИЕ 4. Аргумент, который мне может понадобиться в будущих значениях поддержки за пределами диапазона -255–255, действителен, но не в этом сценарии. В этом сценарии мне это НИКОГДА не понадобится. Если бы была такая возможность, я бы в любом случае уже использовал SMALLINT, так как имело бы смысл быть готовым уже поддерживать эти значения.
ПРИМЕЧАНИЕ 5. Уже прочитал этот вопрос SO: ([Является ли поле BIT быстрее, чем поле int в SQL Server?] [2]), но он сравнивает только один `BIT` с` INT` (4 байта) и принятый ответ не дает никаких весомых аргументов.

10.5.4 Сопоставление типов Microsoft SQL Server

10.5.4 Сопоставление типов сервера Microsoft SQL

В следующей таблице показано сопоставление между Microsoft SQL.
Типы данных сервера (источника) и типы данных MySQL.

Таблица 10.2 Отображение типов

Тип источника MySQL Тип Комментарий
ИНТ ИНТ
TINYINT TINYINT В MySQL установлен флаг UNSIGNED.
МАЛЕНЬКИЙ МАЛЕНЬКИЙ
BIGINT BIGINT
БИТ ТИНИИНТ (1)
ПОПЛАВОК ПОПЛАВОК Значение точности используется для размера хранилища в обоих.
НАСТОЯЩИЙ ПОПЛАВОК
НОМЕР ДЕСЯТИЧНЫЙ
ДЕСЯТИЧНЫЙ ДЕСЯТИЧНЫЙ
ДЕНЬГИ ДЕСЯТИЧНЫЙ
МАЛЕНЬКАЯ ДЕНЬГА ДЕСЯТИЧНЫЙ
СИМВОЛ СИМВОЛ / ДЛИННЫЙ ТЕКСТ В зависимости от длины.MySQL Server 5.6 и выше может иметь CHAR
столбцы длиной до 255 символов. Что-нибудь
больший размер переносится как LONGTEXT.
NCHAR СИМВОЛ / ДЛИННЫЙ ТЕКСТ В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов. Что-нибудь
больше переносится в один из типов больших двоичных объектов ТЕКСТ. В
MySQL, набор символов строк зависит от столбца
набор символов вместо типа данных.
VARCHAR VARCHAR / MEDIUMTEXT / LONGTEXT В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов. Что-нибудь
больше переносится в один из типов больших двоичных объектов ТЕКСТ.
NVARCHAR VARCHAR / MEDIUMTEXT / LONGTEXT В зависимости от длины. MySQL Server 5.6 и выше может иметь VARCHAR
столбцы длиной до 65535 символов.Что-нибудь
больше переносится в один из типов больших двоичных объектов ТЕКСТ. В
MySQL, набор символов строк зависит от столбца
набор символов вместо типа данных.
ДАТА ДАТА
ВРЕМЯ ДАТА
ДАТА ВРЕМЕНИ2 ДАТА Диапазон дат в MySQL: 1000-01-01 00:00:00.000000 — 9999-12-31
23: 59: 59.999999 ‘. Примечание: значения долей секунды приводятся только
хранится с MySQL Server 5.6.4 и выше.
МАЛЕНЬКАЯ ВРЕМЯ ДАТА
DATETIMEOFFSET ДАТА
ВРЕМЯ ВРЕМЯ
TIMESTAMP ВРЕМЯ ВРЕМЕНИ
ROWVERSION ВРЕМЯ ВРЕМЕНИ
ДВОИЧНЫЙ ДВОИЧНЫЙ / СРЕДНИЙ / LONGBLOB В зависимости от длины.
VARBINARY VARBINARY / MEDIUMBLOB / LONGBLOB В зависимости от длины.
ТЕКСТ VARCHAR / MEDIUMTEXT / LONGTEXT В зависимости от длины.
NTEXT VARCHAR / MEDIUMTEXT / LONGTEXT В зависимости от длины.
ИЗОБРАЖЕНИЕ TINYBLOB / MEDIUMBLOB / LONGBLOB В зависимости от длины.
SQL_VARIANT не мигрировал Этот тип данных не поддерживается.
ТАБЛИЦА не мигрировал Этот тип данных не поддерживается.
ИЕРАРХИИД не мигрировал Этот тип данных не поддерживается.
УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР VARCHAR (64) Уникальный флаг, установленный в MySQL.Нет специальной поддержки для вставки
значения уникального идентификатора.
ИМЯ СИСТЕМЫ VARCHAR (160)
XML ТЕКСТ

Как устранить ошибку арифметического переполнения при преобразовании IDENTITY в тип данных tinyint, smallint или int в базе данных Microsoft SQL Server

В прошлом году у нас возникла производственная проблема, когда одно из наших заданий резервного копирования не выполнялось при вставке заказов, агрегированных из других систем, в нашу базу данных SQL Server. Причина была ужасной «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int» , потому что таблица использовала функцию IDENTITY SQL Server для генерации OrderId, и Identity превысила максимальное значение, которое составляет около 2,1 миллиарда , точно 2147 483 647 . Ошибка «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int» возникает, когда значение IDENTITY вставлено в столбец с типом данных int, но значение находится вне допустимого диапазона. Например, если текущее значение Identity становится больше 2 147 483 647, вы не можете сохранить это значение в столбце int, потому что оно больше максимального значения int в SQL Server.

Ошибка чаще встречается в столбцах, использующих меньшие типы данных, такие как SMALLINT, TINYINT и INT, и использует функцию IDENTITY для автоматического создания значений. Например, вы получите сообщение «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных smallint», если значение идентификатора превышает 32 767, что является максимальным значением для smallint в SQL Server.

Точно так же вы получите «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных tinyint», если IDENTITY превышает 255, максимальное значение типа данных tinyint в SQL Server.

Между прочим, если вы не знакомы с рядом основных типов данных в SQL Server, я настоятельно рекомендую вам пройти курс вроде Microsoft SQL Server для начинающих , чтобы изучить основы. Такие знания имеют большое значение для отладки и устранения неполадок такого рода в производственной среде. Это один из моих любимых курсов по SQL Server на Udemy, и он охватывает все фундаментальные концепции, которые программист или администратор баз данных должен знать о SQL Server.

В любом случае, давайте вернемся к тому, как решить эту проблему.

Проблема

Вы получаете «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int» или, возможно, «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных smallint» или «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных tinyint» при вставке данных в таблицу, которая использует IDENTITY в SQL Server. Это полностью зависит от типа данных столбца, но ошибка предполагает, что проблема связана с ИДЕНТИФИКАЦИЕЙ, а значения выходят за пределы допустимого диапазона.

Поиск и устранение неисправностей

Прежде всего, необходимо выяснить, где именно возникает ошибка, например, в каком столбце, в какой таблице и в какой базе данных.К сожалению, ошибки SQL Server не очень точны, но это совсем не плохо. Скорее всего, они сообщат вам, какую хранимую процедуру вы выполняли и какая строка SQL вызвала эту ошибку. Следуя этим следам, вы можете найти столбец, в котором происходит сбой при вставке данных.

После того, как вы нашли столбец, вы можете подтвердить тип данных, например, если вы получаете ошибку «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных tinyint», то, скорее всего, ваш столбец будет иметь tinyint в качестве типа данных.Точно так же это может быть int или small int.

После этого нам нужно найти текущее значение IDENTITY для этой таблицы, и для этого нам нужно использовать инструмент DBCC , как показано ниже:

DBCC CHECKIDENT (‘Audit.OrderDetails’)

Это напечатает что-то вроде:
Проверка идентификационной информации: текущее значение идентификатора «11762933», текущее значение столбца «11762933».
Выполнение DBCC завершено. Если DBCC распечатал сообщения об ошибках, обратитесь к системному администратору.

Если это значение вне допустимого диапазона , то это подтверждает, что значение IDENTITY является причиной проблемы.

Кстати, возможно, вы не сможете запустить эту команду в производственной среде, поскольку у вас может не быть соответствующих разрешений. В этом случае просто включите администраторов базы данных или администраторов баз данных. Я также предлагаю вам пройти курс SQL Server Administration — Part 1 на Udemy, чтобы узнать о таких инструментах, как DBCC, который очень полезен при работе и устранении неполадок, подобных этой, в SQL Server. 63- 1 (9 223 372 036 854 775 807).

2. Или повторно установит значение IDENTITY , если в значении есть пробелы и текущие строки в таблице меньше диапазона значений, поддерживаемого этим столбцом.

Например, если ваш столбец OrderId, вызывающий проблему, имеет тип данных int, но там всего 1 миллиард строк, но значение IDENTITY уже равно 2147483647, тогда вы можете повторно заполнить IDENTITY, чтобы воспользоваться пробелом между фактическим числом строк и текущее значение IDENTITY.

Но для повторного заполнения вам нужно либо отбросить таблицу, либо усечь ее, и по этой причине лучше скопировать данные во временную таблицу, и после повторного заполнения IDENTITY скопируйте ее снова в основную таблицу, как показано ниже:

 ВЫБРАТЬ * ВТЕМП..OrderDetailsBackup FROM OrderDetails ORDER BY OrderId.

TRUNCATE TABLE ЗаказатьПодробнее

DBCC CHECKIDENT (OrderDetails, RESEED, 1)

ВСТАВИТЬ В OrderDetails (....) ВЫБРАТЬ (....) ИЗ OrderDetailsBackup 

Таким образом, все строки теперь имеют значения IDENTITY, начиная с единицы. Вы также можете подтвердить максимальное значение для столбца IDENTITY с помощью функции MAX, как показано ниже:

 ВЫБРАТЬ МАКС. (OrderId) ИЗ OrderDetails 

Это даст вам хорошее представление о том, насколько ваша таблица может вырасти дальше, не прерываясь с ошибкой «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных tinyint» или «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных smallint».

Однако перед применением любого решения, такого как увеличение типа данных или повторное заполнение значения IDENTITY, вам необходимо выполнить комплексную проверку . Например, если вы обращаетесь к этому столбцу в какой-то другой код, это может сломаться.

Если вы увеличите тип данных, например, если Java-код обращается к столбцу int и сохраняет данные в поле int, которое имеет тот же диапазон, что и SQL Server int, то есть (2 147 483 647), то большое значение в него не помещается и он перейдет в отрицательное значение, что может вызвать проблемы.

Точно так же повторное заполнение IDENTITY также может вызвать проблему, если это значение используется для генерации чего-то еще. Подобное значение может привести к дублированию идентификаторов в другой системе.

Итак, даже несмотря на то, что решение «ошибки арифметического переполнения при преобразовании IDENTITY в тип данных tinyint» является простым, его может быть сложно решить в реальном сценарии. Нелегко увеличить диапазон, если ваша таблица важна и содержит данные, которые вы не можете потерять, и многие клиенты используют эти данные в реальном времени.

Хотя хорошее знание самого SQL Server пригодится при решении таких проблем в реальном мире, поэтому я предлагаю каждому программисту, работающему с SQL Server, изучить некоторые функции T-SQL и администрирования. Если вы так думаете, вам следует пройти курс SQL Server Fundamentals by Dan Sullivan на Pluralsight, чтобы действительно изучить эти вещи.

Сводка

1. Ошибка «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int» означает, что значение IDENTITY выходит за пределы диапазона типа данных этого конкретного столбца.

2. Проверьте текущее значение Identity

3. Увеличьте тип данных до bigint или повторно введите IDENTITY
DBCC CHECKIDENT (OrderDetails, RESEED, 1)

Вот и все, что касается , как решить «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int «ошибка в Microsoft SQL Server. Как я уже сказал, у вас есть два варианта: увеличить тип данных или использовать неиспользуемые идентификаторы, чтобы сохранить значение в диапазоне. Если вас не волнуют дубликаты, то простое повторное заполнение идентификатора также может сработать.

Дальнейшее обучение
Введение в SQL
Полный учебный курс по SQL
Microsoft SQL Server для начинающих

Другие статьи по SQL и базам данных вам могут понравиться

  • 5 веб-сайтов для БЕСПЛАТНОГО изучения SQL (веб-сайты)
  • 5 бесплатных курсов для изучения базы данных MySQL (курсы)
  • 50+ вопросов для собеседования по телефону SQL Server с ответами (список)
  • 5 бесплатных курсов по базам данных и SQL (курсы)
  • 5 книг по лучшему изучению SQL (книги)
  • Как объединить более двух таблиц в один запрос (статья)
  • Разница между предложением WHERE и HAVING (ответ)
  • 10 SQL-запросов из интервью (запросов)
  • 5 лучших книг по SQL для продвинутых программистов (книги)
  • Разница между SQL, T-SQL и PL / SQL? (ответ)
  • 5 лучших онлайн-курсов по изучению SQL и баз данных (курсы)

Спасибо, что прочитали эту статью. Если вам нравится мое решение и объяснение ошибки «Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int» в SQL Server, поделитесь, пожалуйста, со своими друзьями и коллегами. Если у вас есть какие-либо вопросы или отзывы, напишите нам.

P.S — Если вы хотите изучить Microsoft SQL Server с нуля, вам следует пройти курс Querying Microsoft SQL Server with Transact-SQL , один из лучших ресурсов для углубленного изучения MSSQL. Это также очень полезно, если вы готовитесь к сертификации SQL Server, например, Microsoft Certificate 70-461: «Запросы к Microsoft SQL Server 2012» и 70-761 «Запросы данных с помощью Transact-SQL».

Типы данных в SQL Server 2008 — DatabaseJournal.com

Введение

Каждый столбец в таблице SQL Server может содержать только один определенный предопределенный тип данных, например символы или числа. Это объявление называется типом данных. В этой статье мы сравним и сопоставим различные типы данных SQL Server 2008. Кроме того, мы выясним, какие типы данных лучше всего подходят для конкретных ситуаций. В SQL Server 2008 существует более тридцати пяти различных типов данных.

Категории

Microsoft классифицирует различные типы данных на следующие семь более широких категорий: точные числа, приблизительные числа, дата и время, строки символов, строки символов Unicode, двоичные строки и другие типы данных.

Номера

Есть две категории чисел: точные числа и приблизительные числа.

Приблизительное количество включает типы Real и Float. В общих чертах подумайте о приближенных числах, которые можно использовать, когда требуется научная нотация.Научная нотация — это способ описания очень больших или очень маленьких чисел с использованием степеней десяти (также называемый экспоненциальной нотацией).

Точные числа включают десятичные, целые и денежные суммы.

Целое число — это счетное число без десятичной точки или дробной части. Все отрицательные числа, положительные числа и ноль являются целыми числами. SQL Server разбивает целые числа на четыре размера:

BigInt: от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807

Int: от -2 147 483 648 до 2 147 483 648

SmallInt: от -32 768 до 32 767

TinyInt: от 0 до 255

Есть две основные причины для попытки «подобрать правильный размер» выбранного вами типа Int, а не просто установить все как BigInt.Первый — это физическое дисковое пространство. BigInt занимает восемь байтов на строку, в то время как обычный Int использует только два. Другой — убедиться, что ваше приложение-потребитель получает только ожидаемый размер данных, чтобы избежать переполнения буфера.

Точные числа с десятичными знаками включают типы данных Decimal, Numeric, Money и SmallMoney. Типы Decimal и Numeric функционально одно и то же. Это означает, что они будут работать, вычислять и вести себя одинаково, единственная разница заключается в математическом определении, а не в том, как SQL Server их использует.Большинство приложений SQL Server, с которыми я сталкиваюсь, используют Decimal. Десятичное число может иметь длину до 38 цифр. Когда Decimal определен, настраиваются его общая длина и максимальное количество десятичных знаков справа. Чем большее количество цифр определяет, тем больше физического дискового пространства используется в каждой строке.

Money и SmallMoney на самом деле являются десятичными числами с фиксированным значением, равным четырем десятичным знакам справа. SmallMoney может быть оценен от — 214 748,3648 до 214 748,3647, а диапазон денег — от -922 337 203 685 477.5808 на 922 337 203 685 477 5807. Одна из причин использования денег вместо десятичного числа включает возможность отображения знаков доллара и запятых после трех цифр.

Струны

Этот раздел начнется с обсуждения свойств символов: Char, VarChar и Text. Тип данных Char (Character) может содержать буквы, цифры и символы клавиатуры. Когда Char определен, его максимальная длина до 8000 также фиксируется. Думайте о Char как о хранении всего, что вы можете ввести в Блокнот — и, как и в случае с Блокнотом, если вы вводите числа в столбец Char, математические вычисления с ними выполнять нельзя.Они обрабатываются как текстовые символы, а не числа. Обычно столбцы Char используются, когда количество символов, введенных в каждую строку, примерно одинаково, например почтовый индекс или номер телефона. Если длина данных будет варьироваться от строки к строке, например, адрес электронной почты, используйте VarChar. VarChar — это Char переменной (Var) длины. Когда создается VarChar, также определяется его максимальная длина. Основная причина использовать VarChar вместо Char — это объем физического дискового пространства, используемого каждым из них.В следующем примере таблица была создана с одним столбцом Char и одним столбцом VarChar. Оба были установлены на максимальный размер 50.

В каждый из них были введены идентичные данные испытаний.

Следующий TSQL возвращает объем байтового пространства физического диска, используемого каждым столбцом и каждой строкой.

 SELECT DATALENGTH (ColChar) AS CharSize, DATALENGTH (ColVarChar) AS VarSize
ИЗ table1
 

Таким образом, столбец Char использует 50 байтов на запись, независимо от того, насколько малы или велики введенные данные.

Еще одна полезная функция VarChar — это возможность указывать неограниченный максимальный размер. Это делается с помощью ключевого слова «Max», как в VarChar (Max). Максимум означает, что размер может превышать 8000 байт. К тому же размер неограничен.

Последняя строка символов — это текст типа данных. Текст был похож на столбец VarChar (Max). В настоящее время он включен в SQL Server 2008 только для обратной совместимости и будет прекращен в будущем.

Юникод

Unicode — это стандартный метод, который позволяет приложениям записывать символы с языков, отличных от нашего. Юникод пригодится при создании многоязычных приложений или международных веб-сайтов. Типы данных Char и VarChar можно настроить так, чтобы разрешить Unicode, поставив перед ними букву «n», как в nChar и nVarChar. Цена такой гибкости — увеличение использования дискового пространства. Ориентировочно планируйте, что Unicode будет вдвое занимать дисковое пространство. Полную информацию о Unicode можно найти на домашней странице Консорциума Unicode: http://unicode.org/.

Бинарные уловки

Двоичные строки используются для сохранения несимвольных данных, таких как изображения и аудио.Для этого используются два типа данных: Binary и VarBinary. Они настраиваются как Char и VarChar. VarBinary (Max) можно использовать для хранения файлов неограниченного размера. Существует также устаревший тип данных под названием Image, но он будет прекращен в будущей версии SQL Server.

Другие типы данных

Существует семь других типов данных, включая Cursor, HierachyID, SQL Variant, Table, TimeStamp, UniqueIdentifier и XML. Тип данных TimeStamp был заменен на RowVersion. UniqueIdentifier — это уникальный GUID.Тип данных SQL Variant можно использовать, когда вы не знаете, какой тип данных ожидать. В основном это 8000 байт всего, что идет в хранилище. Если вы используете XML, используйте фактический тип данных XML, а не VarChar. Тип XML допускает привязку к коллекциям.

Даты и время

SQL Server 2008 включает новые типы данных даты и времени. Их можно просмотреть в статье журнала базы данных «Типы дат SQL 2008», расположенной по адресу http://www.databasejournal.com/features/mssql/article.php/3707856/SQL-2008-Date-Types.htm.

Заключение

В SQL Server 2008 существует более тридцати пяти различных типов данных. Если вашему приложению необходимо сравнивать или управлять столбцами с разными типами данных, можно использовать функции Cast и Convert. Например, столбец Char, содержащий числа, можно преобразовать в Int, а затем выполнить математические вычисления. 63 НОМЕР (10,4) smallmoney Деньги От -214748 до +214748 НОМЕР поплавок Плавающая точка -1.79E до -2.23E, 0 и
2.23E до 1.79E НОМЕР Реальный Плавающая точка От -3,40E до -1,18E, 0 и
От 1.18E до 3.40E


Таблица 1.6: Числовые типы данных — Oracle и Microsoft SQL
Сервер

Коды приложений, которые используют функцию преобразования в Microsoft SQL Server 2000, следует заменить на
приведение функций в Oracle к
избегать конфликтов.Другие проблемы, которых можно избежать с помощью
миграция типов данных включает изменение Microsoft SQL Server
форматы символов и масок даты в Oracle to_date и to_char
конструкции.

Например, выражение SQL Server,

ПРЕОБРАЗОВАТЬ (дата и время;
выражение, стиль)

следует изменить на формат в Oracle, аналогичный формату
следующее:

TO_DATE (выражение, маска_даты)

Ниже приводится краткое описание того, как SQL Server и Oracle реализуют
символьные типы данных:

.

База данных Oracle Microsoft SQL Server 2000
Тип данных Максимальная длина (символов) Тип данных Тип Максимальная длина (символов)
СИМВОЛ 2000 СИМВОЛ Фиксированная длина 8000
VARCHAR2 4000 VARCHAR Регулируемая длина 8000
CLOB 4 294 967 296 ТЕКСТ Регулируемая длина 2 147 483 647
NCHAR 2000 NCHAR Юникод фиксированной длины 4000
NVARCHAR2 4000 NVARCHAR Юникод переменной длины 4000
NCLOB 2 147 483 648 NTEXT Юникод переменной длины 1 073 741 823


Таблица 1.7: Типы символьных данных для Oracle и SQL Server

Хранимые процедуры и Oracle PL / SQL

Самый сложный аспект завершения миграции базы данных на
Oracle — это отображение не-Oracle SQL и хранимых процедур на Oracle SQL и Oracle PL / SQL. Это связано с
основы того, как MySQL и Microsoft SQL Server используют SQL и
разработка приложений в отличие от модели, используемой Oracle.В этом разделе описаны основные различия между тем, как MySQL и
Microsoft SQL Server использует SQL, и будут показаны хранимые процедуры.
здесь.

Одна из основных целей миграции хранимых процедур из
MySQL и MS SQL Server призваны упростить процесс миграции на
Oracle максимально избегает ошибок при миграции
процесс.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *