OceanBase 字符值

2021-06-29 15:03 更新

字符數(shù)據(jù)是根據(jù)字符值大小比較的,而字符值則根據(jù)以下兩種度量進(jìn)行比較:

  • 二進(jìn)制和語言比較
  • 空白填充或非填充比較語義

二進(jìn)制和語言比較

二進(jìn)制比較

在默認(rèn)的二進(jìn)制比較中,OceanBase 根據(jù)數(shù)據(jù)庫字符集中字符的數(shù)字代碼的級聯(lián)值比較字符串。如果一個字符在字符集中的數(shù)值大于另一個,則該字符更大。OceanBase 不支持 ASCII 字符集和 EBCDIC 字符集。

語言比較

在語言排序中,SQL 排序和比較都按照 ?NLS_SORT? 指定的語言規(guī)則。若字符編碼的二進(jìn)制序列與字符集要求的語言序列不匹配,則使用語言比較。若 ?NLS_SORT? 參數(shù)的設(shè)置不是 ?BINARY?,且 ?NLS_COMP? 參數(shù)設(shè)置為 ?LINGUISTIC?,則使用語言比較。

空白填充和非填充比較語義

空白填充比較語義

使用空白填充語義,若兩個值的長度不同,則 OceanBase 首先將空格添加到較短的空格的末尾,以便它們的長度相等。然后,OceanBase 逐個字符地比較值,直到第一個不同的字符為止。在第一個不同位置具有較大字符的值被認(rèn)為較大。如果兩個值沒有不同的字符,則認(rèn)為它們相等。此規(guī)則意味著兩個值僅在尾隨空白數(shù)上不同時相等。

注意 
只有當(dāng)比較中的兩個值都是數(shù)據(jù)類型 CHAR、NCHAR、文本文字或 USER 函數(shù)返回的值時,OceanBase 就會使用空白填充的比較語義。

非填充比較語義

使用非填充語義,OceanBase 逐個字符地比較兩個值,直到第一個不同的字符為止。該位置上具有較大字符的值被認(rèn)為較大。如果兩個不同長度的值在較短的值之前一直相同,則較長的值被認(rèn)為較大。如果兩個長度相等的值沒有不同的字符,則認(rèn)為這些值相等。

注意 
只要比較中的一個或兩個值的數(shù)據(jù)類型為 ?VARCHAR2? 或 ?NVARCHAR?2,OceanBase 就會使用非填充比較語義。

示例

使用不同的比較語義比較兩個字符值的結(jié)果不同。本示例顯示了使用空白填充語義和非填充語義比較。

空白填充

非填充

'ac' > 'ab'

'ac' > 'ab'

'ab' > 'a '

'ab' > 'a '

'ab' > 'a'

'ab' > 'a'

'ab' = 'ab'

'ab' = 'ab'

'ac' > 'ab'

'ac' > 'ab'

'a ' = 'a'

'a ' > 'a'

通常,空白填充和非填充比較的結(jié)果是相同的。而最后一行的比較示例說明了空白填充和非填充比較語義之間的區(qū)別。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號