【问题标题】:MySQL BINARY type representation [duplicate]MySQL BINARY 类型表示
【发布时间】:2017-10-05 19:44:47
【问题描述】:

有一个BINARY 类型的MySQL 查询参数。 MySQL 中的二进制值可以表示为x'1f7a8e'。但是,当将MySqlDbType.Binary 类型的参数添加到MySqlCommand 时,会使用表示为_binary '1f7a8e' 的值形成查询,这会导致查询找不到该行。您可以在下面看到如何使用 MySQL API 的代码示例。

var baz = "1f7a8e";
var cmd = new MySqlCommand("SELECT foo FROM bar WHERE baz=@baz");
cmd.Parameters.Add("@baz", MySqlDbType.Binary).Value = baz;

// Execute query and read result

使用二进制值作为参数的正确方法是什么?

【问题讨论】:

  • 你试过Stream还是byte[]
  • 这似乎是一个奇怪的设计和/或场景。如果您只是按照here 将字符串转换为字节,它是否不起作用?

标签: c# mysql connector


【解决方案1】:

我试图将Guid 存储为BINARY(16)

首先我尝试了guid.ToByteArray(),但没有成功。然后我尝试了guid.ToString().Replace("-", ""),但也失败了。

感谢@daniel-a-white,然后我尝试了guid.ToString().Replace("-", ""),然后将生成的十六进制数转换为字节数组(如here 所述)并且成功了。

【讨论】:

    【解决方案2】:

    您可以将GUID 存储为Binary (16)

    UNHEX(REPLACE(@baz, "-","")) 
    

    这将返回二进制(16)。

    然后选择

    SELECT * FROM mytable WHERE HEX(baz) = @baz
    

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多