Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL 2016 + Base64  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Добрый день.

Существуют ли стандартные функции в mssql 2016: "EncodeBase64" и "DecodeBase64"?
21 авг 19, 12:54    [21954301]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Игорь_UUS, стандартных вроде до сих пор нет, но есть лайфхак:

https://olontsev.ru/2013/06/convert-to-base64-and-back/
21 авг 19, 13:08    [21954327]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
SELECT a.a.value('.','varchar(max)'),cast(a.a.value('.','varbinary(max)') as varchar(max))
  FROM (SELECT CAST('Карл у Клары украл кораллы'as image) 
        FOR XML PATH(''), BINARY BASE64,TYPE
        )a(a); 
21 авг 19, 13:15    [21954338]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Minamoto
Игорь_UUS, стандартных вроде до сих пор нет, но есть лайфхак:

https://olontsev.ru/2013/06/convert-to-base64-and-back/


Попробовал... работает как то криво(((

Из примера

declare @value varbinary(max);
set @value = cast(N'My Test String' as varbinary(max));
select cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varchar(max)') as [encoded_value];
go


Получаю: "TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA=="

Далее проверяю, захожу на http://base64.ru
Пробую закодировать то же самое, получаю "TXkgVGVzdCBTdHJpbmc="

Подскажите в чём разница?
21 авг 19, 14:10    [21954421]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Посетитель
SELECT a.a.value('.','varchar(max)'),cast(a.a.value('.','varbinary(max)') as varchar(max))
  FROM (SELECT CAST('Карл у Клары украл кораллы'as image) 
        FOR XML PATH(''), BINARY BASE64,TYPE
        )a(a); 


а вот это работает правильно!
21 авг 19, 14:15    [21954428]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
msLex
Member

Откуда:
Сообщений: 8091
Игорь_UUS
Minamoto
Игорь_UUS, стандартных вроде до сих пор нет, но есть лайфхак:

https://olontsev.ru/2013/06/convert-to-base64-and-back/


Попробовал... работает как то криво(((

Из примера

declare @value varbinary(max);
set @value = cast(N'My Test String' as varbinary(max));
select cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varchar(max)') as [encoded_value];
go



Получаю: "TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA=="

Далее проверяю, захожу на http://base64.ru
Пробую закодировать то же самое, получаю "TXkgVGVzdCBTdHJpbmc="

Подскажите в чём разница?




Скорее всего проблема в разных представления unicode строки в binary. В SQL это UTF-16, а в base64.ru, скорее всего, UTF-8.
21 авг 19, 14:15    [21954429]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Вопрос закрыт))) с "перепуга" использовал NVARCHAR))
21 авг 19, 14:19    [21954435]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2016 + Base64  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Игорь_UUS, а еще есть такой способ:

SELECT CAST('My Test String' as varbinary(max)) FOR XML PATH(''), BINARY base64

SELECT CAST( CAST( 'TXkgVGVzdCBTdHJpbmc=' as XML ).value('.','varbinary(max)') AS varchar(max) )
21 авг 19, 14:28    [21954448]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить