利用 XML 实现 BASE64 编码和解码

--=================================================
--
--
巧用 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值