Тип данных varbinary: Часть 6: Типы данных в SQL
Часть 6: Типы данных в SQL
Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В данной публикации мы рассмотрим типы данных в SQL. Хочу обратить ваше внимание на то, что различные СУБД поддерживает различный набор типов данных, поэтому это публикация включает в себя самые часто встречающиеся типы данных в SQL реализации различных СУБД.
Типы данных в SQL
Типы данных в SQL важно знать, чтобы правильно и грамотно проектировать базы данных, правильно выбранный типа данных в SQL может очень сильно облегчить работу другим разработчикам. Поэтому не советую вам пропускать раздел о типах данных и всегда, когда вы знакомитесь с новой СУБД, обращать внимание на типы данных, которые поддерживает программа и на то, как она эти типы данных обрабатывает.
Типы данных в SQL
Содержание статьи:
Рассмотрим типы данных, которые есть в языке SQL. У каждого столбца таблицы (у атрибута) должен быть тип данных для значений, которые хранятся в столбце. Тип данных для столбца определяется при создании таблицы, а еще лучше, когда он определяется на этапе проектирования баз данных.
Язык SQL делит данные на пять типов:
- Целочисленный тип данных SQL.
- Вещественный тип данных SQL.
- Типы данных даты и времени SQL.
- Строковый тип данных SQL.
- Строковый тип данных SQL в кодировки Юникод.
Давайте посмотрим, что включает в себя каждый из типов данных SQL и какие значения они позволяют нам хранить.
Целочисленный тип данных SQL
Целочисленный тип данных в SQL довольно таки широкий и зависит от реализации СУБД, снизу в таблицы лишь некоторые типичные примеры целочисленного типа данных SQL.
Тип данных SQL | от | до |
bigint | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
int | -2,147,483,648 | 2,147,483,647 |
smallint | -32,768 | 32,767 |
tinyint | 0 | 255 |
bit | 0 | 1 |
decimal | -10^38 +1 | 10^38 -1 |
numeric | -10^38 +1 | 10^38 -1 |
money | -922,337,203,685,477.5808 | +922,337,203,685,477.5807 |
smallmoney | -214,748.3648 | +214,748.3647 |
Еще раз повторюсь, что набор целочисленных типов данных в SQL зависит целиком и полностью от СУБД.
Вещественный тип данных SQL
Вещественный тип данных SQL, как и целочисленный тип данных, целиком и полностью зависит от реализации СУБД.
Тип | от | до |
float | -1.79E + 308 | 1.79E + 308 |
real | -3.40E + 38 | 3.40E + 38 |
Тип данных даты и времени
Обычно в различных СУБД дата и время — это отдельно выделенный тип данных
Тип данных SQL | от | до |
datetime | Jan 1, 1753 | Dec 31, 9999 |
smalldatetime | Jan 1, 1900 | Jun 6, 2079 |
date | Сохраняет дату как June 30, 1991 | |
time | Сохраняет время как 12:30 P.M. |
Строковый тип данных SQL
Строковых типов данных в SQL может быть гораздо больше, смотрите спецификацию своей СУБД, чтобы узнать какой тип данных может быть использован для строковых значений.
Тип данных SQL | Описание |
char | Максимальная длина 8000 символов (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единица измерения SQL типа данных char — символ. |
varchar | Максимальная длина 8000 символов (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единица измерения SQL типа данных varchar — символ. |
varchar (max) | Максимальная длина 231 символ. Обратите внимание: единица измерения SQL типа данных varchar (max) — символ. |
text | Максимальная длина 2,147,483,647 символов. Обратите внимание: единица измерения SQL типа данных text — символ. |
Строковый тип данных SQL в кодировке юникод
Да, некоторые СУБД выделяют строковый тип данных в кодировке юникод, поскольку в строках с кодировкой юникод на запись одного символа тратится, как минимум, 8 байт, поэтому мы и выделяем строковый тип данных в SQL с кодировкой юникод.
Тип данных SQL | Описание |
nchar | Максимальная длина 4000 символов (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единица измерения SQL типа данных nchar — символ. |
nvarchar | Максимальная длина 4000 символов (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единица измерения SQL типа данных nvarchar — символ. |
nvarchar (max) | Максимальная длина 231 символ. Обратите внимание: единица измерения SQL типа данных nvarchar (max) — символ. |
ntext | Максимальная длина 1,073,741,823 символов. Переменная длина. Обратите внимание: единица измерения SQL типа данных ntext — символ. |
Бинарный тип данных в SQL
Бинарный тип данных в SQL используется для хранения информации в бинарном виде (в виде последовательности байт).
Тип данных SQL | Описание |
binary | Максимальная длина 8,000 байт (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единицы измерения типа данных binary — байты. |
varbinary | Максимальная длина 8,000 байт (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единицы измерения типа данных varbinary — байты. |
varbinary (max) | Максимальная длина 231 байт. Обратите внимание: единицы измерения типа данных varbinary (max) — байты. |
image | Максимальная длина 2,147,483,647 байт (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единицы измерения типа данных image — байты. |
Хочу обратить ваше внимание на то, что каждая СУБД поддерживает свой набор типов данных и размерностей, мы рассмотрели базовые типы данных языка SQL, в следующей теме мы рассмотрим типы данных, которые поддерживает SQLite3.
Знаковые и без знаковые типы данных в SQL
Хочу обратить ваше внимание на то, что в некоторых СУБД числовые типы данных могут делиться на знаковые и без знаковые типы данных. И это совершенно разные типы данных.
Например, если у вас в одной таблице хранится id INTEGER UNSIGNED, а в другой id_table1 INTEGER SIGNED, то связь между таблицами по этим двум столбцам вы реализовать не сможете, так как у них разные типы данных. Будьте внимательны и всегда читайте описания типов данных, когда начинаете использовать новую СУБД.
Приведем пример практического применения типов данных SIGNED и UNSIGNED. Например, у MySQL есть тип данных TINYINT, который занимает один байт и прекрасно подходит для хранения возраста, следовательно, в столбец с типом TINYINT можно записывать целые числа от 0 до 256 (два в восьмой степени, в одном байте 8 бит, а один бит может принимать два значения: ноль или единицу), если столбец без знаковый, если столбец знаковый, то в него можно записать числа от -128 до 127 (один бит уйдет на знак).
Тип данных VARBINARY
« Назад
Хранит символьные данные в виде двоичных литералов без нулевых байтов, дополняющих значение до длины поля. Длина поля в случае типа Varbinary фиксирована. Если есть необходимость хранить двоичные данные переменной длины, то используется тип Blob.
Двоичным литералам предшествует префикс 0h. Далее следуют шестнадцатеричные величины, например: 0h302020, 0h6ABCDEF или 0h (пустой двоичный литерал).
Переменная получит тип Varbinary, если ей присвоить значение двоичного литерала, например:
someVarbinary = 0h616263 && Строка «abc»
? VarType(someVarbinary) && Напечатает: Q
? Cast(someVarbinary as C(Len(someVarbinary))) && Напечатает: abc
? «» + someVarbinary && Напечатает: abc
С данными типа Varbinary (Q) употребляются операции отношения и конкатенации. При этом в выражении могут присутствовать также и данные типов Varchar (V) и Character (C). Тип результата операции конкатенации определяется типом первого операнда, например:
V + Q = V
Q + V = Q
C + V = Q
В операциях отношения с типами Varbinary, Varchar и Character управляет операцией левый операнд, например, сравнение
Q = V
VFP выполняет по байтам, преобразовывая тип Varchar в тип Varbinary, то есть выполняя сравнение
Cast(V as Q(n)) = Q && n = Len(Q)
При сравнении
V = Q
VFP оценивает величины как символьные строки, что равносильно сравнению
Cast(Q as V(n)) = V
Индексные ключи, основанные на полях или выражениях типа Varbinary, содержат нулевые байты, дополняющие значение до длины ключа, например величины 0hAA, 0hAA00 и 0hAA000 имеют одно и то же значение индексного ключа – 0hAA0000. Для ключей, основанных на двоичных данных, применяется collate-последовательность MACHINE. Иная collate-последовательность недопустима.
Тип Varbinary поддерживается для таблиц баз данных, свободных таблиц, курсоров и видов. Преобразование кодовой страницы не выполняется.
С типом Varbinary употребляются символьные функции, кроме LIKE( ), LIKEC( ) и CTOBIN( ), и битовые функции, кроме BITLSHIFT( ) и BITRSHIFT( ). Кроме того, Varbinary не поддерживается и опцией LIKE команды SELECT – SQL.
Пример. Таблица Text имеет поле Vbinfld типа Varbinary поле Charfld типа Character. Длина каждого поля 10 байтов.
select Test
replace Vbinfld with ‘abc’ ;
Charfld with ‘abc’
? Vbinfld && Напечатает: 0h616263
? Charfld && Напечатает: abc
? Len(Vbinfld) && Напечатает: 3
? Len(Charfld) && Напечатает: 10
? At(‘b’, Vbinfld) && Напечатает: 2
? At(0h62, Vbinfld) && Напечатает: 2
Замечания:
1. Функции ALLTRIM( ), LTRIM( ), RTRIM( ) и TRIM( ) удаляют ведущие и хвостовые нулевые байты двоичной величины.
2. Величины типа Varbinary не совместимы с двоичными результатами, возвращаемыми функцией BINTOC( ) и принимаемыми функцией CTOBIN( ).
Типы данных для больших объектов в SQL Server 2008 | Windows IT Pro/RE
. Как правило, эти изображения используются для демонстрации внешнего вида продуктов или другой графической информации на сайтах, и при этом они могут быть очень большими.
В SQL Server имеется много типов данных, которые могут применяться для различных типов LOB-хранилищ, но выбор правильного типа для LOB-хранилища может оказаться очень сложным, если вы вообще захотите хранить большие объекты в самой базе данных. Многие администраторы баз данных предпочитают хранить большие объекты вне баз данных. Основное правило такое: наилучшая производительность при работе с LOB-объектами размером менее 256 Кбайт достигается при их хранении в базе данных, с объектами размером более 1 Мбайт — вне БД.
Хранение LOB-объектов вне базы данных дает выигрыш в производительности, но также создает риски, так как отсутствует встроенный механизм обеспечения целостности данных. Чтобы помочь найти оптимальный способ хранения LOB-данных, необходимо понять различия между типами данных LOB в SQL Server.
1. TEXT. Данный тип используется для текстовых данных переменной длины без поддержки Unicode, такой тип не может служить для хранения двоичных данных. Тип данных TEXT поддерживает данные размером до 2 Гбайт (2^31–1,2147483647). Тип TEXT использовать не рекомендуется, но он еще присутствует в SQL Server 2008 R2.
2. NTEXT. Используется для текстовых данных переменной длины с поддержкой Unicode; как и TEXT, этот тип не поддерживает двоичные данные. Тип NTEXT поддерживает данные размером до 1 Гбайт (2^30–1,1073741823). Тип NTEXT использовать не рекомендуется, но он еще присутствует в SQL Server 2008 R2.
3. IMAGE. Используется для двоичных данных переменной длины; тип данных IMAGE — традиционный тип LOB-хранилищ для SQL Server, в котором можно хранить как текстовые, так и двоичные данные. Тип IMAGE поддерживает данные размером до 2 Гбайт (2^31–1,2147483647). Этот тип данных использовать не рекомендуется, но он еще присутствует в SQL Server 2008 R2.
4. VARCHAR (MAX). Используется для текстовых данных переменной длины без поддержки Unicode. Тип VARCHAR (MAX) поддерживает данные размером до 2 Гбайт (2^31–1,2147483647). Этот тип данных появился в SQL Server 2005 и является рекомендуемым к использованию.
5. NVARCHAR (MAX). Используется для текстовых данных переменной длины с поддержкой Unicode; тип NVARCHAR (MAX) поддерживает данные размером до 1 Гбайт (2^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. Тип XML также можно использовать как тип для хранения больших объемов данных. Он поддерживает данные размером до 2 Гбайт (2^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)
Поделитесь материалом с коллегами и друзьями
Сопоставления типов данных SQL Server — ADO.NET
-
- Чтение занимает 2 мин
В этой статье
В 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 типы, DbType перечисления и SqlDbType методы доступа для SqlDataReader .The following table shows the inferred .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
BIT, BIT VARYINGBIT, BIT VARYING | BINARY (см. примечания)BINARY (See Notes) | VARBINARY, BINARY VARYING BIT VARYINGVARBINARY, BINARY VARYING BIT VARYING | BINARY, VARBINARYBINARY, VARBINARY |
Не поддерживаетсяNot supported | BIT (см. примечания)BIT (See Notes) | BOOLEAN, LOGICAL, LOGICAL1, YESNOBOOLEAN, LOGICAL, LOGICAL1, YESNO | BITBIT |
Не поддерживаетсяNot supported | TINYINTTINYINT | INTEGER1, BYTEINTEGER1 — See BYTE | TINYINTTINYINT |
Не поддерживаетсяNot supported | COUNTER (см. примечания)COUNTER (See Notes) | AUTOINCREMENTAUTOINCREMENT | (См. примечания)(See Notes) |
Не поддерживаетсяNot supported | MONEYMONEY | CURRENCYCURRENCY | MONEYMONEY |
DATE, TIME, TIMESTAMPDATE, TIME, TIMESTAMP | DATETIMEDATETIME | DATE, TIME (см. примечания)DATE, TIME (See Notes) | DATETIMEDATETIME |
Не поддерживаетсяNot supported | UNIQUEIDENTIFIERUNIQUEIDENTIFIER | GUIDGUID | UNIQUEIDENTIFIERUNIQUEIDENTIFIER |
DECIMALDECIMAL | DECIMALDECIMAL | NUMERIC, DECNUMERIC, DEC | DECIMALDECIMAL |
REALREAL | REALREAL | SINGLE, FLOAT4, IEEESINGLESINGLE, FLOAT4, IEEESINGLE | REALREAL |
DOUBLE PRECISION, FLOATDouble precision float | FLOATFLOAT | DOUBLE, FLOAT8, IEEEDOUBLE, NUMBER (см. примечания)DOUBLE, FLOAT8, IEEEDOUBLE, NUMBER (See Notes) | FLOATFLOAT |
SMALLINTSMALLINT | SMALLINTSMALLINT | SHORT, INTEGER2SHORT, INTEGER2 | SMALLINTSMALLINT |
INTEGERINTEGER | INTEGERINTEGER | LONG, INT, INTEGER4LONG, INT, INTEGER4 | INTEGERINTEGER |
INTERVALInterval | Не поддерживаетсяNot supported | Не поддерживаетсяNot supported | |
Не поддерживаетсяNot supported | IMAGEIMAGE | LONGBINARY, GENERAL, OLEOBJECTLONGBINARY, GENERAL, OLEOBJECT | IMAGEIMAGE |
Не поддерживаетсяNot supported | TEXT (см. примечания)TEXT (See Notes) | LONGTEXT, LONGCHAR, MEMO, NOTE, NTEXT (см. примечания)LONGTEXT, LONGCHAR, MEMO, NOTE, NTEXT (See Notes) | TEXTTEXT |
CHARACTER, CHARACTER VARYING, NATIONAL CHARACTER, NATIONAL CHARACTER VARYINGCHARACTER, CHARACTER VARYING, NATIONAL CHARACTER, NATIONAL CHARACTER VARYING | CHAR (см. примечания)CHAR (See Notes) | TEXT(n), ALPHANUMERIC, CHARACTER, STRING, VARCHAR, CHARACTER VARYING, NCHAR, NATIONAL CHARACTER, NATIONAL CHAR, NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING (см. примечания)TEXT(n), ALPHANUMERIC, CHARACTER, STRING, VARCHAR, CHARACTER VARYING, NCHAR, NATIONAL CHARACTER, NATIONAL CHAR, NATIONAL CHARACTER VARYING, NATIONAL CHAR VARYING (See Notes) | CHAR, VARCHAR, NCHAR, NVARCHARCHAR, VARCHAR, NCHAR, NVARCHAR |
Бинарные типы данных — Студопедия
Типы данных для хранения информации о времени.
Денежные типы данных.
Нецелочисленные типы данных.
Числовые целые типы данных.
Типы данных
Понятие типа данныхв SQL Server полностью адекватно понятию типа данных в современных языках программирования. Тип данных определяет диапазон значений, которые можно сохранить в переменной или колонке таблицы.
Числовые типы данных, как следует из названия, предназначены для хранения только числовых значений. Числовые тины данных различаются по возможности хранения положительных и отрицательных значений, целочисленных и дробных значений, а также по общему количеству цифр и количеству цифр после запятой.
К целочисленным типам данных (общее название – integer) относятся следующие типы данных:
Int(или Integer) – для хранения данных используются 32 бита или 4 байта;
Small int– для хранения данных используются 16 бит, или 2 байта;
Tinyint– этот целочисленный тип занимает всего 1 байт и не содержит отрицательных чисел. Все биты интерпретируются как числовое значение. Тип данных tinyint позволяет хранить значения в интервале от 0 до 255.
При выборе того или иного типа данных необходимо исходить из физических значений хранимых данных. Целочисленные типы данных используются для построения индексов и первичных ключей.
Числа, в составе которых есть десятичная точка, называются нецелочисленными. Microsoft разделяет нецелочисленные данные на два типа: десятичные(decimal) и приблизительные(approximate).
Десятичные данные физически хранятся в SQL Server 7.0 не в виде чисел, а в виде последовательности цифр. Для представления каждой десятичной цифры обычно используются 4 бита, то есть один байт позволяет хранить две десятичных цифры, или значение от 0 до 99.
Денежные типы данных обеспечивают хранение значений до 4-х знаков после запятой.
Maney – 8 байт;
Smallmaney – 4 байта.
Datetime – для представления данных этого типа SQL Server 7.0 использует 8 байт. В первых 4 байтах хранится информация о дате. Это значение – своего рода смещение относительно базовой даты. В качестве базовой даты было выбрано 1 января 1753 г. Оставшиеся 4 байта хранят информацию о количестве миллисекунд, прошедших после полуночи данного дня. В итоге тип данных datetime позволяет хранить значения о дате и времени в диапазоне от 1 января 1753 г. до 31 декабря 9999 г. с точностью до 3,33 мс.
Binary(n)– этот тип данных позволяет хранить до 8000 байт. Значение n определяет количество байт, которое будет храниться. В таблице будет выделено n+4 байта (4 байта используются для хранения длины самого поля).
Varbinary(n)– этот тип данных идентичен типу binary с единственным отличием — в таблице для хранения данных этого типа выделяется ровно столько байт, сколько ввел пользователь, плюс 4 байта на описание длины. Аргумент n (максимальное значение – 8000) определяет только максимальную длину, при превышении которой происходит усечение данных.
Image– этот бинарный тип позволяет преодолевать ограничение длины в 8000 байтов, характерное для типов binary и varbinary. При использовании этого типа допускается хранение битовых полей длиной до 231–1 (2 147 483 647). Пространство в таблице для этого типа данных выделяется целыми страницами. Если в таблице имеется колонка с типом данных image, то первоначально сервер выделяет для нее одну страницу. При необходимости выделяются дополнительные страницы, которые связываются в цепочку.
Типа varbinary изображения против тип данных сервера SQL для хранения двоичных данных? — sql-server
Мне нужно хранить двоичные файлы в базе данных сервера SQL. Какой тип данных лучше из Varbinary и Image?
sql-server
Поделиться
Источник
Yoann. B
14 января 2009 в 18:12
4 Ответов
135
Поскольку изображение устарело, вы должны использовать varbinary.
за Microsoft (спасибо за ссылку @Christopher)
типы данных ntext, text и image будут удалены в будущем
версия Microsoft SQL Server. Избегайте использования этих типов данных в новых
разработка и планирование изменений приложений, которые в настоящее время используются
их. Вместо этого используйте nvarchar(max), varchar(max) и varbinary(max).Типы данных фиксированной и переменной длины для хранения больших не-Unicode и
Символ Юникода и двоичные данные. Данные Unicode используют UNICODE UCS-2
набор символов.
Поделиться
cmsjr
14 января 2009 в 18:16
13
varbinary(max)
is the way to go (введено в SQL Server 2005)
Поделиться
SQLMenace
14 января 2009 в 18:27
9
Есть также довольно щеголеватый FileStream
, представленный в SQL Server 2008.
Поделиться
Andrew Rollings
14 января 2009 в 18:45
Поделиться
Bernhard
10 апреля 2017 в 06:46
Похожие вопросы:
SQL сервер varbinary (max) Для типа данных изображения
У меня есть таблица базы данных, в которой хранятся изображения как varbinary(max). Это отлично работает для меня. Однако теперь я должен отправить эти данные в базу данных MS Dynamics, которая…
Какой тип данных SQL лучше всего подходит для хранения строки JSON?
Какой самый лучший тип данных SQL для хранения строки JSON? static List<ProductModel> CreateProductList() { string json = @[ { ProductId: 1, ProductCode: ‘A’, Product: ‘A’ }, { ProductId: 2,…
Добавление двоичных данных для типа данных изображения в SQL server
Можно ли добавить двоичные данные в столбец, тип данных которого-image в SQL server. Я слышала, что это возможно для varbinary(Max),но я хочу решение для данных изображения. Если это так,…
Динамическое преобразование Sql вставка данных varbinary
Я застрял на динамической проблеме sql. Мне нужно иметь возможность сохранять данные varbinary (byte[]) в моей таблице. Вот пример кода, чтобы показать мою проблему: ALTER PROCEDURE ins_photo…
Узел: как преобразовать из varbinary в образ типа данных сервера SQL
У меня есть база данных сервера SQL с изображениями типа varbinary . Мне нужно преобразовать varbinary и вернуть изображение на веб-страницу. Помощь будет оценена по достоинству. Я нашел это, и это…
SQL тайм-аут сервера для больших данных типа varbinary (Макс)
Я храню около 12 MB двоичных данных в таблице сервера SQL. Столбец, содержащий эти данные, имеет тип varbinary(MAX) . Когда я загружаю эти двоичные данные с сервера, это OK, если я нахожусь в LAN….
Типа varbinary против Blob в MySQL
У меня есть около 2k необработанных двоичных данных, которые мне нужно хранить в таблице, но я не знаю, выбрать ли тип Varbinary или Blob. Я прочитал описания в документах MySQL, но не нашел ни…
SQL сервер Varbinary тип данных в DB2
У меня есть проблема с миграцией с сервера SQL на IBM DB2 со следующим фрагментом кода: CREATE TABLE fgt_qrtz_job_details ( sched_name varchar(200) not null, job_name varchar(200) not null,…
Декодирование типа данных Varbinary сервера SQL в строку Java
Попытка обойти проблему Jboss Hibernate в Java, где вы не можете обрабатывать типы данных сервера Nvarchar SQL из хранимой процедуры. Я не могу преобразовать или привести типы данных к varchar из-за…
varbinary или varchar для сохранения AES зашифрованных данных
Я использую функцию mysql и делаю функцию AES_ENCRPYT для хранения некоторых конфиденциальных данных. Таким образом, зашифрованное поле хранения данных aes — это varchar , но когда я вставляю…
Какие данные могут храниться в типе данных varbinary SQL Server?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
VarBinary vs Image SQL Server Data Type для хранения двоичных данных?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
c # — как хранить изображения в столбце varbinary (max)?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
Transact-SQL: преобразование VARBINARY в строку Base64 и наоборот — Статьи TechNet — США (английский)
Введение
Transact-SQL не включает встроенную функцию для преобразования двоичного типа в строку base64 и наоборот, но он включает несколько встроенных опций, которые мы можем использовать. В этой статье демонстрируется несколько вариантов преобразования данных VARBINARY в строку Base64 и
наоборот, преобразовать строку Base64 в VARBINARY.
1. Создайте папку
Для этой демонстрации мы создадим папку: C: \ Ariely_BASE46_VARCHAR
2.вставить изображение
нам понадобится простой образ для нашей демонстрации. Для этой демонстрации мы будем использовать ваш личный аватар из вашего профиля MSDN.
Зайдите в свой профиль -> щелкните правой кнопкой мыши изображение вашего аватара -> и сохраните изображение в новой папке, которую мы создали.
Изображение аватара с именем avatar.jpg
3. Создать новую таблицу
ИСПОЛЬЗОВАТЬ tempdb
ГО
КАПЛЯ
ТАБЛИЦА
ЕСЛИ СУЩЕСТВУЕТ AriTestTbl
ГО
СОЗДАТЬ
ТАБЛИЦА
AriTestTbl (
)
Идентификатор
внутренний
тождество (1,1) первичный
ключ
,
AvatarBinary VARBINARY (
MAX
),
AvatarBase64
VARCHAR
(
МАКС
)
)
ГО
4.Импортировать изображение в базу данных как двоичные данные
* Давайте вставим одно и то же изображение 3 раза, просто чтобы получить несколько строк для демонстрации.
Вставка
AriTestTbl (AvatarBinary)
ВЫБРАТЬ
col
ИЗ
OPENROWSET (
BULK N
'C: \ Ariely_BASE46_VARCHAR \ avatar.jpg'
, SINGLE_BLOB
) табл (цв)
ГО 3
ВЫБРАТЬ
*
ИЗ
AriTestTbl
ГО
Хорошо, теперь мы можем начать обсуждение и демонстрацию…
, мы можем использовать встроенные параметры XML и встроенные функции JSON (из SQL Server 2016) для преобразования VARBINARY в Base64. Использование переменных немного отличается от работы с таблицами. Поэтому мы покажем оба варианта в отдельных разделах.
Преобразование
Переменные от VARBINARY до Base64
В этом разделе мы будем использовать простой выбор из запроса OPENROWSET (так же, как мы импортировали изображение в таблицу), чтобы настроить значение нашей переменной VARBINARY.
Вариант 1. Преобразование двоичного кода в Base64 с использованием JSON
Основная логика этого действия основана на:
- Выбираем значение как таблицу
- Преобразуем данные в таблице в JSON с помощью встроенной подсказки « FOR JSON AUTO ». Эта операция автоматически преобразует любой тип двоичных данных в таблице в строку BASE64.
- Затем, используя функцию OPENJSON , мы извлекаем строку BASE64 из JSON
----------------------- Получить значение
ЗАЯВИТЬ
@B VARBINARY (
MAX
)
ВЫБРАТЬ
@B = столбец
ИЗ
OPENROWSET (
BULK N
'C: \ Ariely_BASE46_VARCHAR \ avatar.jpg '
, ОДИН_БЛОК
) табл (цв)
----------------------- Преобразовать в BASE64
выбрать
столб
из
openjson (
)
(
выберите
столб
из
(
ВЫБРАТЬ
@B
как
цв.) Т
для
json авто
)
)
с
(цв.
varchar
(
макс
))
Перейти
Вариант 2: преобразование двоичного кода в Base64 с помощью XML XQuery
XQuery (XML Query) — это язык запросов, предназначенный для запроса данных XML.Transact-SQL поддерживает подмножество языка XQuery, которое можно использовать для запроса типа данных xml. Для получения дополнительной информации вы можете проверить ссылки
----------------------- Получить значение
ЗАЯВИТЬ
@B VARBINARY (
MAX
)
ВЫБРАТЬ
@B = столбец
ИЗ
OPENROWSET (
BULK N
'C: \ Ariely_BASE46_VARCHAR \ avatar.jpg '
, ОДИН_БЛОК
) табл (цв)
----------------------- Преобразовать в BASE64
выбрать
литье
(
''
как
xml) .value ( 'xs: base64Binary (sql: variable ("@ B"))'
,
'varchar (макс.)'
)
ГО
Вариант 3. Преобразование двоичного файла в Base64 с помощью XML и подсказки «для пути xml»
----------------------- Получить значение
ЗАЯВИТЬ
@B VARBINARY (
MAX
)
ВЫБРАТЬ
@B = столбец
ИЗ
OPENROWSET (
BULK N
'C: \ Ariely_BASE46_VARCHAR \ avatar.jpg '
, ОДИН_БЛОК
) табл (цв)
----------------------- Преобразовать в BASE64
выбрать
*
из
(
выбрать
@B
как
'*'
) Табл.
для
xml path (
''
)
ГО
Преобразование
Значения столбца от VARBINARY до Base64
В большинстве случаев нам нужно будет работать с несколькими строками в таблице, и мы хотим преобразовать только данные VARBINARY в строку BASE64.Базовое решение такое же, как и выше, за исключением решения, использующего XML XQuery, которое нам просто нужно будет использовать разные
метод.
Вариант 1. Преобразование двоичного кода в Base64 с использованием JSON
выбрать
Id, AvatarBinary
из
openjson (
)
(
выберите
Id, AvatarBinary
из
AriTestTbl
для
json авто
)
)
с
(Id
int
, AvatarBinary
varchar
(
макс
))
ГО
Вариант 2: преобразование двоичного кода в Base64 с помощью XML XQuery
выбрать
Id,
литой
(
''
как
xml).значение (
'xs: base64Binary (sql: column ("AriTestTbl.AvatarBinary"))'
,
'varchar (макс.)'
)
из
AriTestTbl
ГО
Вариант 3. Преобразование двоичного файла в Base64 с помощью XML и подсказки «для пути xml»
выбрать
Id, AvatarBinary, s
из
AriTestTbl
крест
применить (
выбрать
AvatarBinary
как
'*'
для xml path (
''
)) T (s)
ГО
В основном для каждого варианта, показанного выше, существует эквивалентный вариант преобразования данных в противоположном направлении.В этой статье мы сосредоточимся на одном примере.
Преобразование переменных из Base64 в VARBINARY
ЗАЯВИТЬ
@B VARBINARY (
MAX
)
ЗАЯВИТЬ
@S
VARCHAR
(
МАКС
)
----------------------- Получить двоичное значение
ВЫБРАТЬ
@B = столбец
ИЗ
OPENROWSET (
BULK N
'C: \ Ariely_BASE46_VARCHAR \ avatar.jpg '
, ОДИН_БЛОК
) табл (цв)
----------------------- Получить результат преобразования двоичного файла в строку BASE64
выбрать
@S = столбец
из
openjson (
)
(
выберите
столб
из
(
ВЫБРАТЬ
@B
как
цв.) Т
для
json авто
)
)
с
(цв.
varchar
(
макс
))
----------------------- Преобразование строки BASE64 обратно в двоичную
ВЫБРАТЬ
@B Оригинал,
@S Base64_String,
CAST
(N
''
КАК
xml).значение (
'xs: base64Binary (sql: variable ("@ S"))'
,
'varbinary (макс.)'
) Результат_Varbinary
ГО
Преобразование значений столбца из Base64 в VARBINARY
Сначала мы заполним таблицу значениями BASE64 изображений.
ОБНОВЛЕНИЕ
AriTestTbl
НАБОР
AvatarBase64 = s
из
AriTestTbl
крест
применить (
выбрать
AvatarBinary
как
'*'
для xml path (
''
)) T (s)
ГО
ВЫБРАТЬ
*
ИЗ
AriTestTbl
ГО
и теперь мы видим пример преобразования данных
ВЫБРАТЬ
AriTestTbl.AvatarBase64,
CAST
(N
''
КАК
xml) .value (
'xs: base64Binary (sql: column ("AriTestTbl.AvatarBase64"))'
,
'varbinary (макс.)'
)
КАК
column_varbinary
ИЗ
AriTestTbl
ГО
Как вы можете видеть в вышеприведенной демонстрации, очень просто преобразовать оба направления между Base64 String и VARBINARY, используя встроенные функции XML и JSON.
Вы можете спросить себя, зачем нам на практике нужны такие действия на стороне SQL Server. Не лучше сделать это на стороне вашего приложения (клиента) … Что ж, в большинстве случаев ответ — да, но, например, во многих случаях мы хотим отправить электронное письмо
с помощью встроенной хранимой процедуры sp_send_dbmail. Используя строку Base64, мы можем включать встроенные изображения, которые хранятся в базе данных как VARBINARY,
в нашем электронном письме.
Эта статья также доступна на следующих языках:
.