gpt4 book ai didi

java - H2 DB 校对

转载 作者:行者123 更新时间:2023-11-30 02:44:15 26 4
gpt4 key购买 nike

H2 数据库可以使用哪种排序规则,既不忽略空格,又同时识别带变音符号和不带变音符号的字符?

例如,应将“Ilkka Seppälä”和“Ilkka Seppala”视为相同。它还需要将“MSaifAsif”和“M Saif Asif”视为不同的(因为空格)

最佳答案

我找到了问题的答案。为了获得我想要的结果,我必须做两件事:

  1. 将 icu4j 添加为项目的依赖项,使 H2 使用 ICU4J 整理器。

     testCompile 'com.ibm.icu:icu4j:55.1'

文档 H2 DB Reference - SET COLLATION 中提到了这一点。 (它没有解释默认整理器和 ICU4J 之间的区别。

  • 将 SET COLLATION ENGLISH STRENGTH PRIMARY 添加到 JDBC url:

    jdbc:h2:mem:test;MODE=MySQL;INIT=CREATE SCHEMA IF NOT EXISTS "public"\;SET COLLATION ENGLISH STRENGTH PRIMARY

  • 我的单元测试片段在添加 ICU4J 后起作用:

      @Test
    public void testUnicode() throws Exception {

    Author authorWithUnicode = new Author();
    authorWithUnicode.setName("Ilkka Seppälä");
    authorRepository.save(authorWithUnicode);

    Author authorWithSpaces = new Author();
    authorWithSpaces.setName("M Saif Asif");
    authorRepository.save(authorWithSpaces);

    assertThat(authorRepository.findByName("Ilkka Seppälä").get()).isNotNull();
    assertThat(authorRepository.findByName("Ilkka Seppala").get()).isNotNull();
    assertThat(authorRepository.findByName("M Saif Asif").get()).isNotNull();
    assertThat(authorRepository.findByName("MSaifAsif")).isEqualTo(Optional.empty());
    }

    以前,在没有 ICU4J 的情况下,如果使用 SET COLLATION ENGLISH STRENGTH PRIMARY 初始化 H2,第四个断言将会失败,因为它会将带空格的字符串视为与不带空格的字符串相同。如果没有 SET COLLATION,第二个断言将会失败,因为它会将带变音符号的字母“a”的名称视为与不带变音符号的名称不同。

    关于java - H2 DB 校对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40723521/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com