2016-11-21 118 views
1

H2數據庫有哪些排序規則可用,它不會忽略空格,但同時可以識別帶元音變音但不相同的字符?H2數據庫整理

例如,它應該將「IlkkaSeppälä」和「Ilkka Seppala」視爲相同。它還需要將「MSaifAsif」和「M Saif Asif」視爲不同(因爲空格)

回答

2

我找到了我的問題的答案。讓我想要的結果的工作,我不得不做兩件事情:

  1. 附加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」看作與不帶有元音的名稱不同。