在有 NLSCASE INSENSITIVE 属性的数据库中,数据库服务器丢弃 NCHAR 和 NVARCHAR 值的大写字母。通过执行隐式的强制转型来在其中避免函数或运算符溢出错误的表达式,可产生与区分大小写的数据库会返回的结果不同的结果,如果该表达式求值为 NCHAR 或 NVARCHAR 数据类型的话。
在有 NLSCASE INSENSITIVE 属性的数据库中,对 CHAR、LVARCHAR 或 VARCHAR 数据类型的操作是区分大小写的,但对 NCHAR 或 NVARCHAR 数据类型的操作不区分大小写。数据类型提升还从包括 CHAR、LVARCHAR 或 VARCHAR 分量的表达式的求值产生不区分大小写的结果(而不是区分大小写),如果同一表达式还包括 NCHAR 或 NVARCHAR 字符串的话。
CREATE DATABASE db NLSCASE INSENSITIVE; CREATE TABLE t1 ( c1 NCHAR(20), c2 NVARCHAR(20), c3 CHAR((20), c4 VARCHAR(20), c5 LVARCHAR(20)) ; INSERT INTO t1 values ('ibm', 'ibm', 'ibm', 'ibm', 'ibm'); INSERT INTO t1 values ('Ibm', 'Ibm', 'Ibm', 'Ibm', 'Ibm'); INSERT INTO t1 values ('IBM', 'IBM', 'IBM', 'IBM', 'IBM');
下列查询使用其字母均为小写的文字字符串的相等谓词,从 NCHAR 列检索值:
SELECT c1 FROM t1 WHERE c1 = 'ibm';
c1 ibm Ibm IBM
下列对同一表的查询从 WHERE 子句将其强制转型为 NCHAR 值的 CHAR 列 c3,返回相同的不区分大小写的结果:
SELECT c1 FROM t1 WHERE c3 = 'ibm'::NCHAR(10);
c1 ibm Ibm IBM
如同在前面的示例中那样,在相同的序列中出现相同的字母的字符串之中,由于不区分大小写的操作丢弃字母大小写的差异,因此在有 NLSCASE INSENSITIVE 属性的数据库中,请留意避免将不区分大小写的规则应用到您期望区分大小写的操作的数据类型提升上下文。
另请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行 部分。