繁体   English   中英

从MySql数据库形式C#读取二进制

[英]Reading binary from MySql-Database form C#

我正在从MySql数据库读取值:

Select SomeColumn from SomeTable

SomeColumn的数据类型设置为BINARY 在C#中,我收到一个包含以下内容的字符串:

值格式

我到底收到什么? 数据库本身将值显示为十六进制值: 0x01080001

如果您将数据存储为十六进制,则可以使用bellow函数将十六进制转换为byte []:

public static byte[] StringToByteArray(string hex) {
    return Enumerable.Range(0, hex.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                     .ToArray();
}

如果您使用的是sql server,则可以使用“ FILESTREAM”存储来使用sql或ntfs系统访问二进制文件(blob)。

但是,我仍然不认为将二进制数据存储到数据库中是个好主意。 如果您的数据小于256K,则可以将其存储为blob;但是,如果数据大于256k,请考虑将其存储为文件。

更新

应用程序设计人员经常面临是否将大型对象存储在文件系统或数据库中的问题。 通常,此决定是为了简化应用程序设计。 有时,还会使用性能度量。 本文着眼于碎片问题–长期部署会影响系统性能和/或可管理性的运营问题之一。 如常识所料,小于256K的对象最好存储在数据库中,而大于1M的对象最好存储在文件系统中。 在256K和1M之间,读写比率和对象覆盖或替换的速率是重要的因素。 我们使用“存储期限”或对象覆盖次数的概念作为标准化挂钟时间的方式。 存储期限使我们的结果或类似的结果适用于许多读写比率和对象替换率。

https://www.microsoft.com/en-us/research/publication/to-blob-or-not-to-blob-large-object-storage-in-a-database-or-a-filesystem/

您可以解析为字符串:

StringBuilder sb = new StringBuilder();

foreach(byte b in fileBytes)
{
    sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));  
}

var myValue = sb.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM