H2/Derby/HSQL 中的 MySQL 函数 'HEX'

标签 mysql derby hsqldb in-memory-database h2db

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

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

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

最佳答案

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

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

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

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

关于H2/Derby/HSQL 中的 MySQL 函数 'HEX',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082794/

相关文章:

php - 从 int 字段中减去 php mysql 查询中的时间

php - 从我的数据库获取个人资料图片以显示在 php 页面上

jpa - 由 : javax. persistence.PersistenceException 引起:没有名为 local 的 EntityManager 的持久性提供程序

hibernate - CASE WHEN THEN ELSE END 中的 bool 文字

java.sql.SQLException : Table/View 'LOCATION' already exists in Schema 'APP'

mysql - 使用 liquibase 对 SQL 文件中的注释进行转义

PHP 数组插入

mysql - 大量sql导出到excel过程的进度条

java - 确定 persistence.xml 的位置

java.sql.SQL语法错误异常 : row column count mismatch