首批通过分布式安全可靠测评,为关键业务系统打造
字符值比较规则
更新时间:2026-03-20 11:35:05
字符数据是根据字符值大小进行比较的,包括两种度量,即二进制和语言比较和空白填充或非填充比较语义。本节主要介绍字符数据两种度量的比较规则。
二进制和语言比较
二进制比较
在默认的二进制比较中,OceanBase 数据库根据数据库字符集中字符的数字代码的级联值比较字符串。如果一个字符在字符集中的数值大于另一个,则该字符更大。OceanBase 数据库不支持 ASCII 字符集和 EBCDIC 字符集。
语言比较
在语言排序中,SQL 排序和比较都按照 NLS_SORT 指定的语言规则。如果字符编码的二进制序列与字符集要求的语言序列不匹配,则使用语言比较。如果 NLS_SORT 参数的设置不是 BINARY,且 NLS_COMP 参数设置为 LINGUISTIC,则使用语言比较。
空白填充和非填充比较语义
空白填充比较语义
使用空白填充语义,如果两个值的长度不同,则 OceanBase 数据库首先将空格添加到较短的空格的末尾,以使它们的长度相等。然后,OceanBase 数据库逐个字符地比较两个值,直到出现第一个不同的字符为止。在第一个不同字符位置具有较大字符的值被认为较大。如果两个值没有不同的字符,则认为它们相等。此规则意味着两个值仅在尾随空白数上不同时相等。
注意
只有当比较中的两个值都是数据类型 CHAR、NCHAR、文本字面量或 USER 函数返回的值时,OceanBase 数据库就会使用空白填充的比较语义。
非填充比较语义
使用非填充语义,OceanBase 数据库逐个字符地比较两个值,直到出现第一个不同的字符为止。该位置上具有较大字符的值被认为较大。如果两个不同长度的值在较短的值比较完之前一直相同,则较长的值被认为较大。如果两个长度相等的值没有不同的字符,则认为这些值相等。
注意
只要比较中的一个或两个值的数据类型为 VARCHAR2 或 NVARCHAR2,OceanBase 数据库就会使用非填充比较语义。
使用不同的比较语义比较两个字符值的结果可能不同。如下表格中的示例显示了使用空白填充语义和非填充语义进行比较的结果。
| 空白填充 | 非填充 |
|---|---|
| 'ac' > 'ab' | 'ac' > 'ab' |
| 'ab' > 'a ' | 'ab' > 'a ' |
| 'ab' > 'a' | 'ab' > 'a' |
| 'ab' = 'ab' | 'ab' = 'ab' |
| 'ac' > 'ab' | 'ac' > 'ab' |
| 'a ' = 'a' | 'a ' > 'a' |
通常,空白填充和非填充比较的结果是相同的。而最后一行的比较示例说明了空白填充和非填充比较语义之间的区别。