【问题标题】:MySQL function 'HEX' in H2 / Derby / HSQLH2 / Derby / HSQL中的MySQL函数'HEX'
【发布时间】:2018-08-11 11:24:17
【问题描述】:

我正在尝试使用内存数据库对 sql 查询进行单元测试。查询使用 MySQL 内置函数“hex”和“unhex”(因为它们将二进制数据写入数据库)。结果这 3 个内存数据库解决方案都不支持“十六进制”功能,我无法对其进行测试。

我的问题 - 如果不将十六进制转换移动到代码而不是直接在查询中使用“十六进制”函数,就没有办法测试查询吗?

ps。我知道内存中的数据库并不代表真正的数据库行为,但查询非常简单 - 插入和选择。

【问题讨论】:

  • 如何定义自己的函数:therealdanvega.com/blog/2010/02/17/…
  • @BryanPendleton 我尝试按照您的建议使用 Derby,但它不支持 limit 关键字。 HSQLDB 更“接近”我想要做的事情。谢谢!

标签: mysql derby hsqldb in-memory-database h2db


【解决方案1】:

HSQLDB 允许您定义自己的函数。如果您没有测试实际的十六进制或字符串返回值,您可以创建模拟函数 HEX 和 UNHEX 来返回输入。例如:

CREATE FUNCTION UNHEX(S VARCHAR(1000)) RETURNS VARCHAR(1000) 
 BEGIN ATOMIC
   RETURN S;
 END;

如果您希望函数返回实际转换后的值,您可以扩展函数以执行转换。在这种情况下,您可以使用内置函数来提取 ASCII 代码,以及任何现有的静态 Java 方法:

更新:HSQLDB 2.4.1 版已添加对这两个函数的支持。

【讨论】:

  • 谢谢!我花了一些时间将架构转换为 HSQLDB 并从 java 创建 SQL 函数,但它有效!
猜你喜欢
  • 2013-06-23
  • 2016-11-02
  • 2020-10-01
  • 2012-07-14
  • 2015-02-14
  • 1970-01-01
  • 2016-01-15
  • 2016-04-06
  • 2011-04-23
相关资源
最近更新 更多