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

时间:2019-03-01 14:43:46

标签: c# mysql

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

Select SomeColumn from SomeTable

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

value format

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

2 个答案:

答案 0 :(得分:0)

如果您将数据存储为十六进制,则可以使用以下函数将十六进制转换为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/

答案 1 :(得分:0)

您可以解析为字符串:

StringBuilder sb = new StringBuilder();

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

var myValue = sb.ToString();