日期:2014-05-18 浏览次数:20912 次
--================================================= -- -- 巧用 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