H2 无法处理有效的 MySQL - CONVERT(images.X USING UTF8) as X

Posted

技术标签:

【中文标题】H2 无法处理有效的 MySQL - CONVERT(images.X USING UTF8) as X【英文标题】:H2 failing to process valid MySQL - CONVERT(images.X USING UTF8) as X 【发布时间】:2021-03-31 14:38:07 【问题描述】:

我想尽办法解决这个问题。 “转换”是一个如此通用的词,这于事无补。我有一个使用 mysql 的旧版应用程序,但数据库代码未经测试。我正在尝试使用 H2 DB 添加单元测试。我的查询出现以下错误:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT ...<verbose query>

当我删除这部分查询时,它可以工作:CONVERT(images.USER_DATA USING UTF8) as USER_DATA,当然其他事情也会失败。

有没有办法让 H2 识别 CONVERT 函数或转换此数据的另一种好方法?

测试属性:

images.jdbc.url=jdbc:h2:mem:images;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:init.sql'
images.driverClassName=org.h2.Driver

【问题讨论】:

phauer.com/2017/dont-use-in-memory-databases-tests-h2 使用 h2 的全部目的是为了在开发过程中快速反馈周期。你还不如说不要使用Java 但是您没有测试将在生产中运行的代码,因此测试几乎毫无意义。 “不理想”并不意味着它们毫无意义,而且你没有告诉我任何我不知道的事情。如果我可以避免使用 H2 并获得快速的反馈周期,我会 100% 这样做,但我做不到。如果这意味着必须添加另一层集成测试来更正确地运行数据库,那就太糟糕了,但仅仅因为这个堆栈在这种方式上有缺陷,没有理由放弃快速反馈周期的测试,即使这些测试有缺陷。 请注意,考虑到我正在咨询的团队中的开发人员已经证明,如果他们必须为他们的数据库编写慢反馈周期测试,他们要么不编写它们,因此尤其如此根本没有,或者它们不是很全面,这就是我在这里试图找出一个让他们测试代码的解决方案的全部原因。 【参考方案1】:

问题最终是数据库将 BLOB 用于 json 而不是 TEXT。改变了,然后我就不用再担心这个了。

【讨论】:

以上是关于H2 无法处理有效的 MySQL - CONVERT(images.X USING UTF8) as X的主要内容,如果未能解决你的问题,请参考以下文章

在 Magnolia:用 MySQL 替换 H2:JackRabbit 无法实例化持久性管理器

在 MySQL 和 H2 中删除唯一约束

有效地将 pandas 数据帧转换为 h2o 帧

NamingException:无法使用 tomcat7-maven-plugin h2/mysql 数据库创建资源实例

Where() in (select) H2

我无法连接到 H2 数据库