日期:2014-05-18  浏览次数:20867 次

利用 XML 实现 BASE64 编码和解码
SQL code
--=================================================
--
-- 巧用 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



------解决方案--------------------
UP......
------解决方案--------------------
学习.
------解决方案--------------------
学习.
------解决方案--------------------
学习,帮顶,蹭分。
------解决方案--------------------
8错,赞一记!

顺便,自定义 UTF-8/UCS2 之间字节流互转的函数可参考这里:
http://topic.csdn.net/u/20100720/14/3ad225ec-f731-43c8-9730-149e82bd9186.html
呵呵~~

------解决方案--------------------
不懂,学习,帮顶,蹭分。
------解决方案--------------------
不太明白。。
------解决方案--------------------
鼓励多多研究这些没用的奇技淫巧

------解决方案--------------------
学习 学习
------解决方案--------------------
学习 学习
------解决方案--------------------

------解决方案--------------------
赞,别出心裁
------解决方案--------------------
恩 不错的东西 加油哦
------解决方案--------------------
需要研究一下,不懂
------解决方案--------------------
学习了。....
------解决方案--------------------
学习了
------解决方案--------------------
顶完再学习
------解决方案--------------------