如果数据不区分大小写,或者使用 ISO_BINENG 以外的归类,则必须对密码文本列进行解密,以便执行字符串比较。
当对字符串执行比较时,对于许多归类而言,等同字符串和相同字符串之间的区别非常重要,并且取决于 CREATE DATABASE 的 CASE 选项。在设置为 CASE RESPECT 且采用 ISO_BINENG 归类的数据库中,将以相同方式解决 SAP IQ 的缺省值、等同性和相同性问题。
相同字符串始终是等同的,但等同字符串有可能不相同。仅当字符串使用相同字节值表示时,它们才是相同的。当数据不区分大小写或使用必须将多个字符视为等同的归类时,等同性和相同性之间的区别非常重要。ISO1LATIN1 便是这种类型的归类。
例如,字符串 "ABC" 和 "abc" 在不区分大小写的数据库中不相同,但二者等同。在区分大小写的数据库中,上述字符串既不相同也不等同。
SAP 加密函数创建的密文保留相同性,但不保留等同性。换句话说,"ABC" 和 "abc" 密文永远不会等同。
若要在归类或 CASE 设置不允许等同性比较的情况下对密文执行等同性比较,应用程序必须将该列中的值修改为某种规范形式,即任何等同值都是相同值。例如,如果数据库是使用 CASE IGNORE 和 ISO_BINENG 归类创建的,且应用程序在将所有输入值放入列中之前向所有输入值应用了 UCASE,则所有等同值都是相同的。