【问题标题】:Save byte array in sql server在sql server中保存字节数组
【发布时间】:2013-03-09 05:21:08
【问题描述】:

我希望使用一种方法来保存需要使用字节数组的密码,如post

那么我应该在 sql server 中使用哪种数据类型来保存字节数组?以及如何使用 SqlCommand 传递和检索字节数组?

【问题讨论】:

    标签: sql-server bytearray sqlcommand


    【解决方案1】:

    如果它总是相同的长度,那么binary(length) 将是合适的。如果长度不同,请使用varbinary(maxlength)

    binary and varbinary.

    而且,正如@p.s.w.g 所说,您可以通过将其放入合适的参数中来从代码中传递它。

    【讨论】:

      【解决方案2】:

      只需像使用任何其他参数一样使用byte[],将SqlDbType.Binary 指定为参数类型。这里是 C# 中的示例

      // Generate your password hash some way
      byte[] passwordHash = new byte[] { 0x0, 0x1, 0x2 ... };
      
      ...
      
      command.Parameters.Add("@passwordHash", SqlDbType.Binary);
      command.Parameters["@passwordHash"].Value = passwordHash;
      

      或者如果你更喜欢 VB.NET

      ' Generate your password hash some way
      Dim passwordHash As Byte() = New Byte() { &H0, &H1, &H2 ... }
      
      ...
      
      command.Parameters.Add("@passwordHash", SqlDbType.Binary)
      command.Parameters("@passwordHash").Value = passwordHash
      

      【讨论】:

      • 使用二进制sql数据类型可以吗?当我在谷歌上搜索了一些人告诉它用于像图像这样的大二进制文件时,你同意吗?
      • @user2155873 将VARBINARY(MAX) 用于较大或不同长度的文件。对于密码哈希,请使用 BINARY(32)(或者无论您的哈希有多长)。
      • @user2155873 - 假设你可以声明一个binary(5),它分配了5个字节的存储空间,你会说那只适合存储一个大文件吗?
      【解决方案3】:

      我建议您使用nvarchar(45) 和 Base64 将您的 32 个字节转换为字符串。这是保存哈希的标准方法。

      您也可以使用nvarchar(64) 并将其存储为十六进制字符串。

      【讨论】:

      • 我已阅读有关此主题的 Microsoft 文档,但从未看到将哈希转换为 Base64 的建议。无论如何,为什么不将哈希保存为字节数组?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多