base64存储mysql text类型_请教一下,我想把一段base64的字符串存在数据库里 - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...

IF OBJECT_ID(N'dbo.f_base64_decode') IS NOT NULL

DROP FUNCTION dbo.f_base64_decode;

GO

/*-- == base64 解码=================================

在SQL Server 中,使用FOR XML 生成xml 实例时,binary 数据

使用base64 编码,而解释xml 的时候,却没有相应的解码方法。

使用此函数可以解决这个问题

Base64 编码把个位字节(*8=24)转化为个位的字节(*6=24)

之后在位的前面补两个,形成位一个字节的形式。用下面的个字符重新

表示:“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”

如果输入的数据的长度不是的倍数,则编码结果的不足部分用等号“=”

补足。

---------------------------------------------------------

-- 调用示例

SELECT -- 还原成字符串

v1 = CONVERT(varchar(max), v1),

v2 = CONVERT(nvarchar(max), v2)

FROM(

SELECT  -- 解码base64 编码

v1 = dbo.f_base64_decode(v1),

v2 = dbo.f_base64_decode(v2)

FROM(  -- 通过for xml 生成base64 编码

SELECT

v1 = (SELECT CONVERT(varbinary(max), 'base64 test') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)'),

v2 = (SELECT CONVERT(varbinary(max), N'base64 解码测试') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)')

)DATA

)A

---------------------------------------------------------

-- 环境要求

适用于sql server 2005 或者更高的版本

-- ==== 邹建.02(引用请保留此信息) =============== */

CREATE FUNCTION dbo.f_base64_decode(

@input varchar(max)

)RETURNS varbinary(max)

AS

BEGIN

DECLARE

@base64 char(64),

@pos int,

@len int,

@output varbinary(max);

SELECT

@base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',

@pos = 1,

@len = LEN(@input),

@output = 0x;

IF @input = ''

RETURN 0x;

IF @len % 4 > 0 OR @len IS NULL

RETURN NULL;

WHILE @pos < @len

BEGIN

SELECT

@output = @output

+ CONVERT(binary(1), ((v1 & 63) * 4 ) | ((v2 & 48) / 16))

+ CONVERT(binary(1), ((v2 & 15) * 16) | ((v3 & 60) / 4 ))

+ CONVERT(binary(1), ((v3 & 3 ) * 64) | ((v4 & 63) / 1 )),

@pos = @pos + 4

FROM(

SELECT

v1 = CHARINDEX(SUBSTRING(@input, @pos + 0, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,

v2 = CHARINDEX(SUBSTRING(@input, @pos + 1, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,

v3 = CHARINDEX(SUBSTRING(@input, @pos + 2, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,

v4 = CHARINDEX(SUBSTRING(@input, @pos + 3, 1) COLLATE Chinese_PRC_BIN, @base64) - 1

)A;

END;

RETURN(SUBSTRING(@output, 1, @len / 4 * 3 - 3 + CHARINDEX('=', RIGHT(@input, 2) + '=')));

END;

GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值