我想知道Oracle Unicode数据库是否以规范化形式存储数据,或者Oracle是否保证从查询返回的文本是以某种规范化形式存在。
这似乎应该是一个容易回答的问题,但我在网上找不到任何关于它的信息 - 这让我觉得答案是否定的。有人有这个瘦吗?
答案 0 :(得分:4)
请注意Canonical Equivalence上的Oracle文档说明了什么:
规范等效是多语言归类的一个属性,描述了如何对等效的代码点序列进行排序。如果在特定的多语言校对中应用规范等价,那么规范等效的字符串将被视为相等。
一个Unicode代码点可以等同于一系列基本字母代码点加上变音符号代码点。这称为Unicode规范等价。例如,
ä
等于其基本字母a
和变音符号。语言标志CANONICAL_EQUIVALENCE = TRUE
表示Unicode中定义的所有规范等效规则都需要应用于特定的多语言排序规则。 Oracle数据库定义的多语言归类包括规范等效标志的适当设置。如果所有数据都是组合形式,您可以将标志设置为FALSE
以加快比较和排序功能。
因此,基本上,Oracle有一个CANONICAL_EQUIVALENCE
标志,您可以配置该标志来控制Oracle在排序过程中如何比较和考虑相同Unicode逻辑字符的分解/组合形式。
此标志的存在意味着Oracle 在存储数据时不会自动规范化(组合或分解)Unicode字符。如果Oracle在存储数据时确实自动执行了规范化,那么使用该标志将是荒谬无用的。