--=================================================
--
-- 巧用 XML 实现 BASE64 编码和解码
--
-- 原理: 利用 XML / BINARY BASE64 的存储特性
--
-- 字符集: 本机字符集使用 varchar
-- UCS2: 使用 nvarchar
-- UTF-8: 自定义 UTF-8/UCS2 之间字节流互转的函数
--
-- SQLCenter
-- 2010-09-14
--
--=================================================
------------------- BASE64 编码 -------------------
declare @str varchar(max), @x xml
set @str = '编码-SQLCenter'
-- 1. FOR XML ROW
set @x = (select convert(varbinary(max), @str) as b for xml raw, BINARY BASE64) -- 这里大写醒目一点
select [str] = @str, [xml] = @x, encode = @x.value('(row/@b)[1]', 'varchar(max)')
/*
str xml encode
--------------- --------------------------------- ---------------------
编码-SQLCenter <row b="seDC6y1TUUxDZW50ZXI=" /> seDC6y1TUUxDZW50ZXI=
*/
-- 2. FOR XML PATH
set @x = (select b from (select convert(varbinary(max), @str) as b) t for xml path(''))
select [str] = @str, [xml] = @x, encode = @x.value('(b)[1]', 'varchar(max)')
/*
str xml encode
--------------- ---------------------------- ---------------------
编码-SQLCenter <b>seDC6y1TUUxDZW50ZXI=</b> seDC6y1TUUxDZW50ZXI=
*/
go
------------------- BASE64 解码 -------------------
declare @base64 varchar(max), @x xml
set @base64 = 'veLC6y1TUUxDZW50ZXI='
set @x = '<b>' + @base64 + '</b>'
select [base64] = @base64, [xml] = @x, decode = convert(varchar(max), @x.value('(b)[1]', 'varbinary(max)'))
/*
base64 xml decode
--------------------- ---------------------------- ---------------
veLC6y1TUUxDZW50ZXI= <b>veLC6y1TUUxDZW50ZXI=</b> 解码-SQLCenter
*/
go
利用 XML 实现 BASE64 编码和解码
最新推荐文章于 2024-08-09 10:33:31 发布