Base64在SQL中编码utf8字符串

本文关键字:utf8 字符串 编码 SQL Base64 | 更新日期: 2023-09-27 17:52:48

我有一个SQL函数用于将字符串转换为base64编码的字符串。唯一的问题是,UTF8没有被使用,我可以告诉,因为我有一个单独的c#工具,给出不同的输出。

SQL功能:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Base64Encode] ( @sInput NVARCHAR(max) )
RETURNS NVARCHAR(max)
BEGIN
DECLARE @vInput              VARBINARY(max)
DECLARE @sEncodedOutput      NVARCHAR(max)
set @vInput = convert(varbinary(max), @sInput)
set @sEncodedOutput = cast('' as xml).value('xs:base64Binary(sql:variable("@vInput"))', 'NVARCHAR(max)')
RETURN @sEncodedOutput
END
c#

        try
        {
            encodedValueTextbox.Text = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(valueTextbox.Text));
        }
        catch (Exception ex)
        {
            encodedValueTextbox.Text = ex.Message;
        }

是否有办法让SQL使用UTF8?

Base64在SQL中编码utf8字符串

您的@sInput是NVARCHAR,它是UNICODE UCS-2。所以,你把UCS-2转换成二进制。

您可以将输入参数更改为varbinary,并将UTF-8作为二进制传递到函数中。如果函数中的源数据也是来自SQL的nvarchar,则需要不断将二进制数据转换回源c#(可能到存储为varbinary的点,基本上我不知道系统的其余部分是什么样子)。

另一种方法是在CLR中编写此函数。使用c#将UCS-2转换为UTF-8,然后在那里进行Base64编码。