Уроки по Sql

Sql decimal тип данных – Иллюстрированный самоучитель по SQL для начинающих › Основы SQL [страница — 14] | Самоучители по программированию

Содержание

Иллюстрированный самоучитель по SQL для начинающих › Основы SQL [страница — 14] | Самоучители по программированию

Основы SQL

Тип BIGINT

Тип данных BIGINT (большой целый) – это новый тип данных, появившийся вместе с SQL:2003. Он также предназначен для целых значений и определяется как тип, точность которого может быть не намного больше, чем точность данных типа INTEGER, или сильно превышать ее. Предел точности данных типа BIGINT зависит от реализации.

Тип NUMERIC

В данных типа NUMERIC (числовой), кроме целого компонента, может быть и дробный. Для этих данных можно указать точность и масштаб. Точность, как вы помните, – это максимально возможное количество цифр.

Масштаб – это количество цифр после запятой. Масштаб не может быть отрицательным или превышать точность числа.

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

Скажем, например, что в вашей реализации SQL точность по умолчанию для типа данных NUMERIC равна 12, а масштаб по умолчанию равен 6. Если вы укажете, что столбец базы данных имеет тип NUMERIC, то в этом столбце смогут находиться числа вплоть до 999999.999999. Если же, с другой стороны, вы для столбца указываете тип данных NUMERIC (10), то в столбце смогут находиться только числа с максимальным значением 9999.999999. Параметр (10) указывает максимально возможное для числа количество цифр. Когда для столбца будет указан тип данных NUMERIC (10.2), то в столбце могут находиться числа с максимальным значением – 99999999.99. В этом случае хотя и останется всего десять цифр, но справа от десятичной запятой будут находиться только две из них. (Имейте в виду, что синтаксис SQL требует использовать для разделения целой и дробной частей числа не запятую, а десятичную точку, как это принято в США и странах Европы.)

Тип данных NUMERIC предназначен для значений, таких как 595.72. Точность этого значения равна 5 (общее количество цифр), а масштаб – 2 (количество цифр справа от десятичной запятой). Для чисел, таких, как это, подходит тип данных NUMERIC (5.2).

Тип DECIMAL

Тип данных DECIMAL (десятичный) похож на NUMERIC. В нем может быть дробная часть, и для него можно указать точность и масштаб. DECIMAL отличается от NUMERIC тем, что если точность имеющейся реализации SQL будет больше указанного значения, то в реализации будет использоваться большая точность. А если точность или масштаб не указаны, то, как и при использовании типа NUMERIC, в реализации применяются значения по умолчанию.

В столбце, тип которого NUMERIC (5.2), нельзя поместить числа, большие 999.99. Если же тип столбца DECIMAL (5.2), в него всегда можно поместить значения до 999.99. Кроме того, если точность реализации позволяет, то СУБД сможет поместить в этот столбец и значения, большие, чем 999.99.

Если в ваших данных имеются дробные части, тогда применяйте тип NUMERIC или DECIMAL, а если ваши данные всегда состоят из целых чисел, то используйте тип INTEGER или SMALLINT. Когда нужно добиться максимальной переносимости, следует использовать тип NUMERIC, потому что поле, тип которого вы определите, например, как NUMERIC (5.2), будет во всех системах иметь один и тот же диапазон значений.

Приблизительные числовые типы

У некоторых величин имеется такой большой диапазон возможных значений (большое количество порядков), что компьютер с данным размером регистра не может в точности представить все эти значения. (Размерами регистра являются, например, 32 бита, 64 бита и 128 бит.) Обычно в таких случаях точность не является необходимой, и поэтому будет достаточно иметь близкое приближение. Для работы с такими данными SQL:2003 определяет три приблизительных числовых типа.

Тип REAL

Тип данных REAL (действительное число) дает возможность задавать числа однократной точности с плавающей запятой, точность которых зависит от реализации. Вообще-то, точность определяется используемым оборудованием. Например, 64-битовая машина дает большую точность, чем 32-битовая.

Число с плавающей запятой (floating – point number) – это число с десятичной запятой Десятичная запятая «плавает» или появляется в разных частях числа, в зависимости от значения этого числа. Примерами чисел с плавающей запятой являются 3.1, 3.14 и 3.14159.

samoychiteli.ru

24. ТИПЫ ДАННЫХ, ПОДДЕРЖИВАЕМЫЕ СУБД MYSQL (ЧИСЛОВЫЕ)

Главная » Информационные системы » Управление данными » 24. ТИПЫ ДАННЫХ, ПОДДЕРЖИВАЕМЫЕ СУБД MYSQL (ЧИСЛОВЫЕ)

Числовые типы данных

MySQL поддерживает все числовые типы данных языка SQL92 по стандартам ANSI/ISO. Они включают в себя типы точных числовых данных (NUMERICDECIMALINTEGER и SMALLINT) и типы приближенных числовых данных (FLOATREAL и DOUBLE PRECISION). Ключевое слово INTявляется синонимом для INTEGER, а ключевое слово DEC — синонимом для DECIMAL.

Типы данных NUMERIC и DECIMAL реализованы в MySQL как один и тот же тип — это разрешается стандартом SQL92. Они используются для величин, для которых важно сохранить повышенную точность, например для денежных данных. Требуемая точность данных и масштаб могут задаваться (и обычно задаются) при объявлении столбца данных одного из этих типов, например:

    salary DECIMAL(5,2)

В этом примере — 5 (точность) представляет собой общее количество значащих десятичных знаков, с которыми будет храниться данная величина, а цифра 

2 (масштаб) задает количество десятичных знаков после запятой. Следовательно, в этом случае интервал величин, которые могут храниться в столбце salary, составляет от -99,99 до 99,99 (в действительности для данного столбца MySQL обеспечивает возможность хранения чисел вплоть до 999,99, поскольку можно не хранить знак для положительных чисел).

В SQL92 по стандарту ANSI/ISO выражение DECIMAL(p) эквивалентно DECIMAL(p,0). Аналогично, выражение DECIMAL также эквивалентноDECIMAL(p,0), при этом предполагается, что величина p определяется конкретной реализацией. В настоящее время MySQL не поддерживает ни одну из рассматриваемых двух различных форм типов данных 

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

Величины типов DECIMAL и NUMERIC хранятся как строки, а не как двоичные числа с плавающей точкой, чтобы сохранить точность представления этих величин в десятичном виде. При этом используется по одному символу строки для каждого разряда хранимой величины, для десятичного знака (если масштаб > 0) и для знака `-‘ (для отрицательных чисел). Если параметр 

масштаба равен 0, то величины DECIMAL иNUMERIC не содержат десятичного знака или дробной части.

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

. Если столбцу с типом DECIMAL или NUMERIC присваивается значение, выходящее за границы интервала, заданного значениями точности и масштаба (или принятого по умолчанию), то MySQL сохранит данную величину со значением соответствующей граничной точки данного интервала.

В качестве расширения стандарта ANSI/ISO SQL92 MySQL также поддерживает числовые типы представления данных TINYINTMEDIUMINT иBIGINT, кратко описанные в таблице выше. Еще одно расширение указанного стандарта, поддерживаемое MySQL, позволяет при необходимости указывать количество показываемых пользователю символов целого числа в круглых скобках, следующих за базовым ключевым словом данного типа (например 

INT(4)). Это необязательное указание количества выводимых символов используется для дополнения слева выводимых значений, которые содержат символов меньше, чем заданная ширина столбца, однако не накладывает ограничений ни на диапазон величин, которые могут храниться в столбце, ни на количество разрядов, которые могут выводиться для величин, у которых количество символов превосходит ширину данного столбца. Если дополнительно указан необязательный атрибут ZEROFILL, свободные позиции по умолчанию заполняются нолями. Например, для столбца, объявленного как INT(5) ZEROFILL, величина 4 извлекается как 00004. Следует учитывать, что если в столбце для целых чисел хранится величина с количеством символов, превышающим заданную ширину столбца, могут возникнуть проблемы, когда MySQL будет генерировать временные таблицы для некоторых сложных связей, так как в подобных случаях MySQL полагает, что данные действительно поместились в столбец имеющейся ширины.

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

В версии MySQL 4.0.2 числовые типы данных с плавающей точкой также могут иметь параметр UNSIGNED. Как и в целочисленных типах, этот атрибут предотвращает хранение в отмеченном столбце отрицательных величин. Но, в отличие от целочисленных типов, максимальный интервал для величин столбца остается прежним.

Тип FLOAT обычно используется для представления приблизительных числовых типов данных. Стандарт ANSI/ISO SQL92 допускает факультативное указание точности (но не интервала порядка числа) в битах в круглых скобках, следующих за ключевым словом FLOAT. Реализация MySQL также поддерживает это факультативное указание точности. При этом если ключевое слово FLOAT в обозначении типа столбца используется без указания точности, MySQL выделяет 4 байта для хранения величин в этом столбце. Возможно также иное обозначение, с двумя числами в круглых скобках за ключевым словом FLOAT. В этом варианте первое число по-прежнему определяет требования к хранению величины в байтах, а второе число указывает количество разрядов после десятичной запятой, которые будут храниться и показываться (как для типов DECIMAL и NUMERIC). Если в столбец подобного типа попытаться записать число, содержащее больше десятичных знаков после запятой, чем указано для данного столбца, то значение величины при ее хранении в MySQL округляется для устранения излишних разрядов.

Для типов REAL и DOUBLE PRECISION не предусмотрены установки точности. MySQL воспринимает DOUBLE как синоним типа DOUBLE PRECISION — это еще одно расширение стандарта ANSI/ISO SQL92. Но, вопреки требованию стандарта, указывающему, что точность для REAL меньше, чем для DOUBLE PRECISION, в MySQL оба типа реализуются как 8-байтовые числа с плавающей точкой удвоенной точности (если не установлен «ANSI-режим»). Чтобы обеспечить максимальную совместимость, в коде, требующем хранения приблизительных числовых величин, должны использоваться типы FLOAT или DOUBLE PRECISION без указаний точности или количества десятичных знаков.

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

Например, интервал столбца INT составляет от -2147483648 до 2147483647. Если попытаться записать в столбец INT число -9999999999, то оно будет усечено до нижней конечной точки интервала и вместо записываемого значения в столбце будет храниться величина -2147483648. Аналогично, если попытаться записать число 9999999999, то взамен запишется число 2147483647.

Если для столбца INT указан параметр UNSIGNED, то величина допустимого интервала для столбца останется той же, но его граничные точки сдвинутся к 0 и 4294967295. Если попытаться записать числа -9999999999 и 9999999999, то в столбце окажутся величины 0 и 4294967296.

Для команд ALTER TABLELOAD DATA INFILEUPDATE и многострочной INSERT выводится предупреждение, если могут возникнуть преобразования данных вследствие вышеописанных усечений.

it-iatu.ru

sql-server — Есть ли разница между DECIMAL и NUMERIC в SQL Server?

Есть ли разница между DECIMAL и NUMERIC типами данных в SQL Server?

Когда следует использовать DECIMAL и NUMERIC?

задан Dhana 17 апр. ’09 в 10:38 источник поделиться

Это то, что тогда стандарт SQL2003 (§6.1 Типы данных) говорит о двух:

 <exact numeric type> ::=
    NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | SMALLINT
  | INTEGER
  | INT
  | BIGINT

 ...

21) NUMERIC specifies the data type
    exact numeric, with the decimal
    precision and scale specified by the
    <precision> and <scale>.

22) DECIMAL specifies the data type
    exact numeric, with the decimal scale
    specified by the <scale> and the
    implementation-defined decimal
    precision equal to or greater than the
    value of the specified <precision>.
источник поделиться

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

Edit:

Говоря о нескольких коллегах, возможно, это связано с тем, что DECIMAL является стандартом ANSI SQL, а NUMERIC — одним из Mircosoft, предпочитающим его чаще всего на языках программирования…. Может быть;)

источник поделиться

Ответ Joakim Backman специфичен, но это может принести ему дополнительную ясность.

Есть незначительная разница. Согласно SQL For Dummies, 8-е издание (2013):

Тип данных DECIMAL аналогичен NUMERIC…. Разница что ваша реализация может указать точность, превышающую то, что вы укажите — если это так, реализация использует большую точность. если ты не указывайте точность или масштаб, реализация использует дефолт значения, как и для типа NUMERIC.

Похоже, что разница в некоторых реализациях SQL заключается в целостности данных. DECIMAL позволяет переполнять из того, что определено на основе некоторых системных значений по умолчанию, где в качестве NUMERIC нет.

источник поделиться

Это синонимы, без разницы. Типичные и числовые типы данных — это числовые типы данных с фиксированной точностью и масштабированием.

-- Initialize a variable, give it a data type and an initial value

declare @myvar as decimal(18,8) or numeric(18,8)----- 9 bytes needed

-- Increse that the vaue by 1

set @myvar = 123456.7

--Retrieve that value

select @myvar as myVariable
источник поделиться

qaru.site

1.2. Изменения типа данных DECIMAL. MySQL: руководство профессионала

1.2. Изменения типа данных DECIMAL

Этот раздел обсуждает характеристики типа данных DECIMAL (и синонимов) в MySQL 5.1, со специфическим отношением к следующим темам

Максимальное число цифр

Формат хранения

Требования к памяти

Ненормативное MySQL расширение к верхнему диапазону столбцов DECIMAL

Возможные несовместимости с прикладными программами, которые написаны для старых версий MySQL, отмечены в этом разделе.

Синтаксис объявления для столбца DECIMAL: DECIMAL(M,D). Диапазоны значений для параметров в MySQL 5.1 следующие:

M: максимальное число цифр (точность). Это имеет диапазон от 1 до 65. Старые версии MySQL позволяли диапазон от 1 до 254.

D: число цифр направо от десятичной точки (масштаб). Это имеет диапазон от 0 до 30 и должно быть не больше, чем M.

Максимальное значение 65 для M означает, что вычисления на значениях DECIMAL точны до 65 цифр. Это ограничение точности в 65 цифр также применяется к числовым литералам с точным значением, так что оно задает максимальный диапазон таких литералов. В старых версиях MySQL десятичные значения могли иметь до 254 цифр. Однако, вычисления были выполнены, используя числа с плавающей запятой и таким образом были приблизительны, не точны.

Значения для столбцов DECIMAL в MySQL 5.1 сохранены, используя двоичный формат, который упаковывает девять десятичных цифр в четыре байта. Требования к памяти для целочисленных и дробных частей каждого значения определены отдельно. Каждые девять цифр требуют четырех байт, и любые цифры сверх этого требуют некоторой доли четырех байтов. Например, DECIMAL(18,9) имеет девять цифр с обеих сторон десятичной точки, так что целочисленная и дробная части требуют четырех байтов каждая. Столбец DECIMAL(20,10) имеет по десять цифр с обеих сторон десятичной точки. Каждая часть требует четырех байтов для девяти из цифр и одного байта для остающейся цифры.

Память, требуемая для остающихся цифр, показана в следующей таблице:

Остающиеся цифры | Число байтов

0 | 0

1 | 1

2| 1

3 | 2

4 | 2

5 | 3

6 | 3

7 | 4

8 | 4

9 | 4

В отличие от старых версий MySQL (до 5.0.3), столбцы DECIMAL в MySQL 5.1 не сохраняют символ + или цифры 0 в начале значения. Если Вы вставляете +0003.1 в столбец DECIMAL(5,1), это сохранено как 3.1. Прикладные программы, которые полагаются на старое поведение, должны измениться, чтобы обработать это изменение.

Столбцы DECIMAL в MySQL 5.1 не позволяют значения больше, чем диапазон, подразумеваемый по определению столбца. Например, столбец DECIMAL(3,0) поддерживает диапазон от -999 до 999. А столбец DECIMAL(M,D) позволяет M цифр налево от десятичной точки. Это не совместимо с прикладными программами, полагающимися на старые версии MySQL, которые разрешали сохранять дополнительную цифру вместо знака +.

SQL-стандарт требует, чтобы точность NUMERIC(M,D) была точно M цифр. Для DECIMAL(M,D) стандарт требует точности по крайней мере M цифр, но позволяет больше. В MySQL DECIMAL(M,D) и NUMERIC(M,D) то же самое, и оба типа имеют точность ровно M цифр.

Поделитесь на страничке

Следующая глава >

it.wikireading.ru

Сопоставления типов данных SQL Server

  • Время чтения: 3 мин
  • Соавторы

В этой статье

В SQL Server и .NET Framework используются различные системы типов.SQL Server and the .NET Framework are based on different type systems. Например, максимальная разрядность структуры .NET Framework Decimal составляет 28, в то время как максимальная разрядность десятичных и числовых типов данных SQL Server — 38.For example, the .NET Framework Decimal structure has a maximum scale of 28, whereas the SQL Server decimal and numeric data types have a maximum scale of 38. Чтобы обеспечить целостность данных при чтении и записи, объект SqlDataReader предоставляет характерные для SQL Server типизированные методы доступа, возвращающие объекты System.Data.SqlTypes, а также методы доступа, возвращающие типы .NET Framework.To maintain data integrity when reading and writing data, the SqlDataReader exposes SQL Server–specific typed accessor methods that return objects of System.Data.SqlTypes as well as accessor methods that return .NET Framework types. Типы данных SQL Server и .NET Framework также представлены перечислениями в классах DbType и SqlDbType, которые можно использовать при указании типов данных SqlParameter.Both SQL Server types and .NET Framework types are also represented by enumerations in the DbType and SqlDbType classes, which you can use when specifying SqlParameter data types.

В приведенной ниже таблице показан выводимый тип .NET Framework.NET Framework, перечисления DbType и SqlDbType, а также методы доступа для класса SqlDataReader.The following table shows the inferred .NET Framework.NET Framework type, the DbType and SqlDbType enumerations, and the accessor methods for the SqlDataReader.

1 нельзя задать DbType свойство SqlParameter для SqlDbType.Date.1 You cannot set the DbType property of a SqlParameter to SqlDbType.Date.
2 используйте конкретный типизированный метод доступа, если известен базовый тип sql_variant.2 Use a specific typed accessor if you know the underlying type of the sql_variant.

Документация по SQL ServerSQL Server documentation

Дополнительные сведения о типах данных SQL Server см. в разделе типы данных (Transact-SQL).For more information about SQL Server data types, see Data types (Transact-SQL).

См. такжеSee Also

Типы данных SQL Server и ADO.NETSQL Server Data Types and ADO.NET
Двоичные данные и данные большого объема SQL ServerSQL Server Binary and Large-Value Data
Сопоставления типов данных в ADO.NETData Type Mappings in ADO.NET
Настройка параметров и типы данных параметровConfiguring Parameters and Parameter Data Types
Центр разработчиков наборов данных и управляемых поставщиков ADO.NETADO.NET Managed Providers and DataSet Developer Center

docs.microsoft.com

MS SQL Server и 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).

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

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-dd2017-07-12

  • dd/mm/yyyy12/07/2017

  • mm-dd-yy07-12-17

    В таком формате двузначные числа от 00 до 49 воспринимаются как даты в диапазоне 2000-2049. А числа от 50 до 90 как диапазон чисел 1950 — 1999.

  • Month dd, yyyyJuly 12, 2017

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

Строковые типы данных
  • 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. На каждый символ выделяется 2 байта.Можно задать конкретный размер от 1 до 4 000 символов: . Если строка должна иметь больше 4000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб.

Еще два типа TEXT и NTEXT являются устаревшими и поэтому их не рекомендуется использовать. Вместо них применяются VARCHAR и NVARCHAR соответственно.

Примеры определения строковых столбцов:


Email VARCHAR(30),
Comment NVARCHAR(MAX)
Бинарные типы данных
  • BINARY: хранит бинарные данные в виде последовательности от 1 до 8 000 байт.

  • VARBINARY: хранит бинарные данные в виде последовательности от 1 до 8 000 байт, либо до 2^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: хранит координаты местонахождения на плоскости.

metanit.com

SQL (типы данных): таблица

В современном мире насчитывается большое количество средств и технологий, предназначенных для хранения информации. Одним из наиболее распространенных способов являются базы данных, для работы с которыми используются различные системы управления. Данный способ хранения предполагает, что все данные четко структурированы и занесены в специальные таблицы. Они, в свою очередь, состоят из столбцов-атрибутов определенного типа данных.

Тип данных – что это?

Сегодня существует несколько определений, объясняющих понятие термина «тип данных». Однако каждое из них имеет один общий смысл. Поэтому тип данных можно условно обозначить как группу данных, характеризуемую ее значениями (символьными, числовыми и т.д.), а также операциями, применяемыми к рассматриваемым значениям.

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

Классификация типов данных

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

На их базе была разработана современная классификация, включающая в себя указатели, логический, целочисленный, числовой с плавающей точкой и строковый типы данных. SQLклассификация полностью охватывает все вышеперечисленное. Однако для некоторых современных СУБД существуют дополнительные надстройки. К ним относятся Oracle и MySQL.

Базовые типы данных

Использующиеся при создании атрибутов таблиц, отвечающих стандартам языка SQL, типы данных подразделяются на 4 класса:

  • строковые значения;
  • дроби;
  • целочиселенные значения;
  • значения даты и времени.

Строковый тип данных

Первая группа значений позволяет хранить любые данные, представленные в виде символов.

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

CHAR (size)

Используется для хранения строк. Параметр в скобках позволяет фиксировать длину хранимой строки. Максимальный размер в байтах, который можно задать для строки, – 255.

VARCHAR (size)

Аналогично предыдущему типу позволяет хранить строки длиной до 255 символов. Однако отличие от CHAR в том, что для хранения значения данного типа выделяется требуемое количество памяти. То есть для строки, состоящей из 5-ти символов, потребуется 6 байт памяти. В первом же случае память для значения будет выделена согласно указанному параметру.

TINY ТЕХТ

Используется для хранения строковых данных размером до 255 символов.

ТЕХТ

Используется для хранения текстовой информации, размер которой не превышает 65 535 букв.

BLOB

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

MEDIUM ТЕХТ

Был разработан на базе типа ТЕХТ, но позволяет хранить больше данных за счет увеличенного размера до 16 777 215 букв или символов.

MEDIUM BLOB

Используется для сохранения в базе электронных документов, размер которых не превышает отметку в 16 777 215 знаков.

LONG ТЕХТ

Функционально аналогичен предыдущим типам, но с увеличенным объемом памяти до 4 гигабайт.

LONG BLOB

Позволяет помещать в базу данные больших объемов (4 294 967 295 символа).

ENUM (a, b, c, etc.)

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

SET

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

Таблица дробных типов данных

Дробные SQL типы данных используются для хранения чисел с плавающей точкой. На практике, как правило, задают различные финансовые показатели. В зависимости от необходимой точности применяют один из трех представленных:

FLOAT (size, d)

Позволяет содержать дробные числа указываемой точности d.

DOUBLE (size, d)

Используется для хранения дробных чисел с двоичной точностью.

DECIMAL(size, d)

Хранение дробных значений в виде строк.

Например, в банковских расчетах точность дробной части достигает значение в 8-мь или 10-ть знаков. Первые два типа не могут быть задействованы в данной области.

Хранение финансовых показателей в виде строк значительно облегчает решение многих задач. Однако при решении финансовых вопросов или проведении различных операций SQL преобразование типов данных имеет огромное значение. Разработчики должны обязательно учитывать тип хранения и способы обработки, чтобы данные всегда оставались неизменными.

Целочисленный тип данных

Целые числа – отдельная группа чисел, образующая один из основных классов. Целочисленные SQL типы данных основываются на использовании базового типа INTEGER с некоторым расширением его свойств.

INT (size)

Хранение целочисленных значений, образующих диапазон [-231; 231-1]

TINYINT (size)

Служит для хранения чисел в диапазоне от -128 до 127

SMALLINT (size)

Характеризуется увеличенным диапазоном хранимых значений в размере от -32 768 до 32 767

MEDIUMINT (size)

Используется для хранения чисел размерностью от -223 до 223-1

BIGINT (size)

Охватывает диапазон целочисленных значений, начиная с -263 и заканчивая 263-1

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

Поэтому разработчикам баз данных важно помнить, что использование больших диапазонов для атрибутов влечет увеличение затрат на память. Необходимо четко анализировать решаемые задачи и выявлять случаи, где известен примерный диапазон и определено условие использования чисел со знаком. Если диапазон используемых аргументов невелик, а все числа будут положительными, то будет корректнее использовать беззнаковый тип, образуемый атрибутом UNSIGNED.

Типы данных даты и времени

При изучении основ SQL типы данных даты и времени представляют особый интерес.

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

DATE

Главное предназначение — хранение даты в формате ГОД-МЕСЯЦ-ДЕНЬ (“ГГГГ-MM-ДД” или «уууу-mm-dd» ). Обычно значения разделены через «-», однако в качестве разделителя может быть задействован любой символ, кроме цифр.

TIME

Позволяет заносить в ячейку таблицы временные значения. Все значения задаются форматом «hh:mm:ss»

DATETIME

Объединяет функции предыдущих двух типов. Формат хранения представлен следующим образом: «уууу-mm-dd hh:mm:ss».

TIMESTAMP

Сохраняет дату и время, исчисляемое количеством секунд, прошедших начиная с полуночи 1.01.1970 года и до заданного значения.

YEAR (M)

Используется для хранения годовых значений в двух- или четырехзначном формате.

Что ещё необходимо знать?

Все эти типы данных детально систематизированы компанией Microsoft. SQL типы данных ею разработаны более подробно.

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

Специальный указатель – NULL

Иногда при заполнении базы данных возникает ситуация, когда при добавлении записи в таблицу необходимость вносить информацию во все столбцы отсутствует. Для этого применяется специальный указатель пустого значения – NULL, который в качестве вспомогательного средства использует язык SQL. Типы данных столбцов, которые не обязательно должны быть заполнены, при создании таблиц указываются с оператором, разрешающим включение пустых значений. В другом случае оператор NULL с дополнительной приставкой NOT может быть задействован для указания обязательного заполнения всех значений.

Указатель NULL не имеет типа, а просто указывает на пустое значение в таблицах баз данных. Поэтому он может быть скомбинированным с любым из вышеперечисленных типов.

fb.ru

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

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