H2數據庫有哪些排序規則可用,它不會忽略空格,但同時可以識別帶元音變音但不相同的字符?H2數據庫整理
例如,它應該將「IlkkaSeppälä」和「Ilkka Seppala」視爲相同。它還需要將「MSaifAsif」和「M Saif Asif」視爲不同(因爲空格)
H2數據庫有哪些排序規則可用,它不會忽略空格,但同時可以識別帶元音變音但不相同的字符?H2數據庫整理
例如,它應該將「IlkkaSeppälä」和「Ilkka Seppala」視爲相同。它還需要將「MSaifAsif」和「M Saif Asif」視爲不同(因爲空格)
我找到了我的問題的答案。讓我想要的結果的工作,我不得不做兩件事情:
附加ICU4J作爲一個依賴於這使得H2使用ICU4J和核對項目。
testCompile 'com.ibm.icu:icu4j:55.1'
此文檔H2 DB Reference - SET COLLATION中提及。 (這不,雖然默認的排序器和ICU4J的之間的差別解釋
添加集整理ENGLISH強度初級線圈的JDBC網址:
的jdbc:H2:MEM:測試; MODE = MySQL的; INIT = CREATE SCHEMA如果不存在 「公共」 \;設置整理ENGLISH強度初級線圈
我的單元測試的一個片段,其加入後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,如果H2使用SET COLLATION ENGLISH STRENGTH PRIMARY進行初始化,則第4個斷言會失敗,因爲它會將字符串的空格視爲與沒有空格的字符串相同。如果沒有SET COLLATION,第二個斷言將會失敗,因爲它會將帶有元音的字母「a」看作與不帶有元音的名稱不同。