mysql查询和C#输出不一致

mysql使用unhex函数查询的是中文,C#输出后变成了base64字符串。

查询语句 select unhex(e7a7a6e6a5bc) ,输出 (秦楼),在C# 输出后变为(56em5qW8)

MySQL 中的 UNHEX 函数可以将十六进制字符串转换为二进制字符串。如果查询的字符串是中文的话,需要先使用 HEX 函数将其转换为十六进制字符串,再使用 UNHEX 函数将其转换回中文。

请注意,UNHEX 函数适用于存储二进制数据的字段上,并不适用于普通字符串字段上,如果要使用需要指定字符集为 binary, 请先按照这样的语句建立字段:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `binary_data` varbinary(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

这个例子里建立了一个名为 "test" 的表,里面有一个 "binary_data" 字段,用来存储二进制数据。

C语言中没有unhex这个函数,需要使用C语言提供的API来进行转换,如sscanf()函数。

望采纳!!!点击回答右侧采纳即可!!

unhex函数是将十六进制字符串转换为字符串,在mysql中使用该函数可以正确的将十六进制字符串(e7a7a6e6a5bc)转换为(秦楼)。

然而,在C#中输出后变成了base64字符串(56em5qW8)是因为在C#中对于中文字符进行了编码处理。该字符串为 UTF-8 编码。

如果你想在C#中正确输出该字符串,可以使用 C# 的 Encoding 类中的 FromBase64String 方法将其转换为普通字符串,再使用 Encoding 类的 GetString 方法将该字符串从 UTF-8 编码转换为所需的编码格式。

那你可以通过C# 中的FromBase64String()方法将base64字符串转成普通字符串。
我给你提供个FromBase64String()使用示例,你参考一下
若有帮助,还望采纳,点击回答右侧采纳即可。

static void Main(string[] args)
        {
            string s = "秦楼";
            Console.WriteLine(s);
            byte[] payload = Encoding.Default.GetBytes(s);
            String payloadStr = Convert.ToBase64String(payload);
            Console.WriteLine(payloadStr);
            var bylst = Convert.FromBase64String(payloadStr);
            var iss= System.Text.Encoding.Default.GetString(bylst);
            Console.WriteLine(iss);
            Console.Read();
        }

unhex() 是 MySQL 中的一个函数,它可以将十六进制字符串转换为原始字节序列。在上面的查询语句中,unhex('e7a7a6e6a5bc') 将十六进制字符串转换为 UTF-8 编码的字节序列,这个字节序列对应了中文字符串“秦楼”。

然而,在 C# 中,可能使用了不同的编码或编码转换方式,导致原始字节序列变成了 base64 编码的字符串。在转换的时候需要注意使用的编码方式。

在 C# 中,可以使用 Encoding 类来将字节序列转换为字符串。在这个例子中,需要使用 UTF-8 编码。

这里给出一个示例代码,它将十六进制字符串转换为中文字符串:

using System;
using System.Text;

class HexToString
{
    public static void Main()
    {
        // 16进制字符串
        string hexString = "e7a7a6e6a5bc";
        // 将十六进制字符串转换为字节数组
        byte[] bytes = new byte[hexString.Length / 2];
        for (int i = 0; i < bytes.Length; i++)
        {
            bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
        }
        // 使用 UTF-8 编码将字节数组转换为字符串
        string result = Encoding.UTF8.GetString(bytes);
        Console.WriteLine("Original String : {0}",result);
    }
}

可以输出结果:

Original String : 秦楼

注意如果获取的十六进制字符串是在 C# 中字符串变量,那么需要注意它的存储格式,因为这个字符串可能已经被转换成Unicode,在转换时需要注意使用的编码方式。
仅供参考,望采纳,谢谢。

你的C#后台代码如何编写的,截图看下可以给出更加准确的答案