我正在从MySql数据库中读取一个值:
Select SomeColumn from SomeTable
SomeColumn
的数据类型设置为BINARY
。
在C#中,我收到一个包含以下内容的字符串:
我究竟收到什么?数据库本身将值显示为十六进制值:0x01080001
答案 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之间,读写比率和速率 对象覆盖或替换是重要因素。我们使用了 “存储期限”或对象覆盖数量的概念 标准化挂钟时间。保质期可以达到我们的结果或类似水平 这样的结果将应用于多种读写比率,并且 对象替换率。
答案 1 :(得分:0)
您可以解析为字符串:
StringBuilder sb = new StringBuilder();
foreach(byte b in fileBytes)
{
sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
}
var myValue = sb.ToString();