Вставьте строку base 64 в базу данных SQL Server - PullRequest
5 голосов
/ 22 декабря 2009

Я получаю строку base 64 из XML-файла, который я хочу вставить в базу данных SQL Server. Какого типа поля имеют поля в моей базе данных? VARBINARY (MAX)? Нужно ли преобразовывать строку base 64 в другой формат перед вставкой в ​​базу данных?

С наилучшими пожеланиями

Ответы [ 6 ]

12 голосов
/ 22 декабря 2009

Если вы намереваетесь сохранить строку Base64 как есть, вы можете использовать тип данных VARCHAR. Кодировка Base64 была разработана для использования только 7-битных символов ASCII.

Однако, если вы предпочитаете хранить данные в двоичном формате, вам нужно будет использовать тип данных VARBINARY и преобразовать строку Base64 в двоичный файл. Вы можете использовать функциональность XQuery (начиная с SQL Server 2005), чтобы легко преобразовывать значения в VARBINARY и наоборот.

Преобразовать значение Base64 из переменной в VARBINARY:

declare @str varchar(20);

set @str = '3qAAAA==';

select cast(N'' as xml).value('xs:base64Binary(sql:variable("@str"))', 'varbinary(20)');

Преобразовать двоичное значение в переменной в Base64:

declare @bin varbinary(20);

set @bin = 0xDEA00000;

select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'varchar(20)');

Источник (и другие примеры): Преобразование из Base64 в varbinary и наоборот .

9 голосов
/ 22 декабря 2009

Поскольку это строка, а строка - это строка, то вы можете без проблем поместить ее в поле VARCHAR(x) или VARCHAR(MAX).

«размер» VARCHAR(x) имеет макс. длина 8000 символов, в то время как VARCHAR(MAX) имеет размер 2 ГБ (2 ** 31-1 байт).

4 голосов
/ 24 декабря 2009

Стоит отметить, что если вы используете varchar(x) или varchar(max) со строками base64 и используете строку base64 в любых предложениях WHERE для поиска, вы должны использовать сортировку с учетом регистра для столбца, поскольку регистр имеет значение для Данные, закодированные в base64.

1 голос
/ 22 декабря 2009

Вы можете вставить саму строку Base64 в столбец VARCHAR, или , можно преобразовать строку Base64 обратно в массив byte[] и сохранить ее в столбце VARBINARY.

Выбор наиболее подходящего варианта будет зависеть от того, что вам впоследствии нужно сделать с данными. Если вам нужна строка Base64, сохраните ее таким образом (в столбце VARCHAR); Если вам нужен массив byte[], преобразуйте его (и сохраните в столбце VARBINARY).

1 голос
/ 22 декабря 2009

varbinary (MAX) будет наиболее эффективным носителем (необработанные байты меньше, чем кодированные b64), но вам придется преобразовать из b64 в необработанные байты. Если вы хотите сохранить b64 как есть, просто используйте varchar (max). На самом деле зависит - если вы собираетесь разделить его обратно на XML, было бы менее сложно оставить b64 в покое.

0 голосов
/ 01 сентября 2017

Я бы всегда предлагал вам хранить изображения в виде varbinary (max) в БД и в качестве var, потому что Varbinary стимулирует производительность и занимает очень меньше памяти по сравнению с varchar (max), но в современных базах данных и хранилище это, вероятно, намного меньше беспокойство. Если вы хотите сохранить byte [], перейдите к varbinary (max). В случае, если вы хотите сохранить строку base64, я бы всегда предложил nvarchar (max). Однако производительность и размер всегда будут дорогими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...