【问题标题】:How to compare base64 data in database with binary data?如何将数据库中的base64数据与二进制数据进行比较?
【发布时间】:2014-08-21 12:20:12
【问题描述】:

由于某些项目要求,我必须将我的 DB VARCHAR 数据转换为 base64(VARBINARY)。现在的问题是,当我尝试从我的 java 应用程序中查询数据库时,使用:

criteria.createCriteria("parties").add(Restrictions.ilike("name", "%"+ "james".getBytes() +"%"));

我的查询返回null,而我的数据库名称列中已经有james 的base64 表示。为什么?

【问题讨论】:

  • 你不应该将 james 转换为 base64 编码而不是获取原始字节吗?
  • 没有那个选项,因为不能破坏现有的代码

标签: java hibernate criteria hibernate-criteria


【解决方案1】:

灵感来自question

试试这样的:

criteria.createCriteria("parties").add(
    Restrictions.ilike(
      "name",
      "%"+ new String(Base64.encodeBase64("james".getBytes())) +"%"));

【讨论】:

  • 除非在解码后的文本中“james”之前有多个 3 个字符,否则这将不起作用。
  • @OlivierGrégoire,你能对此发表评论吗?我自己不喜欢base64编码。为什么需要 3 个字符的倍数?
  • base64_encode("james") 返回amFtZXM=base64_encode("ajames") 返回 YWphbWVz ; base64_encode("abjames") 返回 YWJqYW1lcw==base64_encode("abcjames") 返回 YWJjamFtZXM=。看第一个和最后一个。您将在第 4 次看到第一个结果。您在第二个或第三个结果中看到第一个结果吗?
  • @OlivierGrégoire 好点。因此,除非填充整个数据集,否则几乎不可能进行类似搜索?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多