2015-08-28 23 views
1

我想知道Oracle Unicode數據庫是否以規範化形式存儲數據,或者Oracle保證從查詢返回的文本是否處於特定的規範化形式。Oracle是否將unicode文本存儲在特定的規範化表單中?

這似乎應該是一個容易回答的問題,但我在網上找不到關於它的信息 - 這導致我認爲答案是否定的。有人有這個瘦嗎?

+0

你是什麼意思*「規範化形式」*?您是否問Oracle是否自動轉換已知在Unicode標準中具有等效,可能更緊湊,規範化形式的某些字符組合?如果是這樣,我真的希望甲骨文不這樣做。 – sstan

+0

術語標準化形式來自Unicode標準,它定義了4種標準化形式,其中只有兩種可能與本次討論相關:NFC和NFD。 NFC是標準化表格組合,而NFD是標準化表格分解。所以如果一個角色有一個組合的或多個分解的形式,NFC就會組成它,而NFD會把它定義爲一個定義的分解順序。這可以用於排序和比較。沒有規範化的保證人,文本比較將不得不檢查,例如, ä= a +變音和ä。 – Spacemoose

回答

3

注意什麼上Canonical Equivalence Oracle文檔說:

規範等價是一個多語種對照的屬性,並介紹點序列代碼是如何排序的等價。如果在特定的多語言歸類中應用規範等價,則規範等價的字符串將被視爲相等。

一個Unicode代碼點可以等同於一系列基本代碼點加上變音代碼點。這被稱爲Unicode規範等價。例如,ä等於其基本信件a和變音符號。語言標誌CANONICAL_EQUIVALENCE = TRUE表示以Unicode定義的所有規範等價規則都需要應用於特定的多語種歸類。 Oracle數據庫定義的多語言歸類包括適用於規範等價標誌的適當設置。如果所有數據均爲其組成形式,則可以將該標誌設置爲FALSE以加快比較和排序功能。

所以,基本上,Oracle有一個CANONICAL_EQUIVALENCE標誌,可以配置控制Oracle如何比較和排序過程中考慮分解相同的Unicode邏輯字符/組成形式。

此標誌的存在意味着Oracle 不會在存儲數據時自動規範化(編寫或分解)Unicode字符。如果Oracle在存儲數據時確實會自動執行標準化,那麼標誌的使用將是荒謬的,無用的。