首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL测试H2大小写敏感性

如何使用MySQL测试H2大小写敏感性
EN

Stack Overflow用户
提问于 2016-08-08 16:51:58
回答 1查看 4.4K关注 0票数 1

我正在开发一个使用mysql的Scala/Play应用程序。我遇到了一个问题,当我的应用程序部署到我们的集成环境时,我的应用程序会中断,因为我的应用程序的sql查询对于表和别名来说是错误的。在开发过程中,我没有注意到这一点,因为我使用的是MySQL默认不区分大小写的Mac。除了将本地环境配置为区分大小写之外,我还希望在编写有大小写错误的查询时单元测试失败。我正在用H2测试数据库,正如播放文档所描述的那样。我使用以下代码设置数据库,其中模式是具有创建脚本的字符串:

代码语言:javascript
复制
def apply[T](block: Database => T):Unit = {
  Databases.withInMemory(
     urlOptions = Map(
       "MODE" -> "MYSQL"
     ),
     config = Map(
       "logStatements" -> false
     )
   ){
  database =>
    Evolutions.withEvolutions(database, SimpleEvolutionsReader.forDefault(
      Evolution(
        1,
        schema,
        ""
      )
    )){
      block(database)
    }
  }
}

直观地说,配置映射有一个类似"caseSensitive" -> true之类的选项,但是我无法找到所有选项的文档。有人知道H2是否有此配置选项以及它是什么吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-09 05:24:40

H2文档和Play docs (基本上是引用H2文档)解释了这一点:

在MySQL中,默认情况下,文本列不区分大小写,而在H2中,它们区分大小写。但是,H2也支持不区分大小写的列。若要创建不区分大小写文本的表,请将IGNORECASE=TRUE追加到数据库URL (例如:jdbc:h2:~/test;IGNORECASE=TRUE)。

来自播放文档

默认情况下,MySQL中的文本比较不区分大小写,而在H2中则区分大小写(与大多数其他数据库一样)。H2确实支持不区分大小写的文本比较,但需要使用SET IGNORECASE TRUE单独设置。这会影响使用=LIKEREGEXP进行比较。

因此,您需要更改urlOptions以考虑IGNORECASE参数:

代码语言:javascript
复制
def apply[T](block: Database => T): Unit = {
  Databases.withInMemory(
    urlOptions = Map(
      "MODE" -> "MYSQL",
      "IGNORECASE" -> "TRUE"
    ),
    config = Map(
      "logStatements" -> false
    )
  ) {
    database =>
      Evolutions.withEvolutions(database, SimpleEvolutionsReader.forDefault(
        Evolution(
          1,
          schema,
          ""
        )
      )) {
        block(database)
      }
  }
}

但是,我主张在运行集成测试时不要使用不同的数据库引擎。尝试使用生产中使用的相同数据库,因为它将使您的测试更有信心。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38834660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档