您可以显式地创建区分大小写或不区分大小写的数据库。
CREATE DATABASE employees IN dbspaceYee WITH BUFFERED LOG;
CREATE DATABASE stores IN dbsp1 WITH LOG NLSCASE SENSITIVE;因为缺省启用区分大小写,以下语句具有相同的作用:
CREATE DATABASE stores IN dbsp1 WITH LOG;
在区分大小写的数据库中,例如 Boolean 条件 'M' MATCHES 'm' 计算为假。
所有的 GBase 8s 数据库对于内置 CHAR 、LVARCHAR 和 VARCHAR 数据类型的字符串字符操作都区分大小写。如果您创建区分大小写数据库,则不论缺省或显式使用 NLSCASE SENSITIVE 关键字,如果数据库语言环境支持字母大小写,数据库仍将区域语言支持的数据类型 NCHAR 和 NVARCHAR 看作区分大小写。
在某些应用程序中,字符串的大小写会被忽略。 例如,数据项处理,可能接受字符串 'M' 和 'm' 在一条记录中是逻辑等价的。对于大数据集,应用条件逻辑将两种情况变量转换为单个值可能导致性能低于将记录存储在不区分大小写的数据库的 NCHAR 或 NVARCHAR 列中,其中 'M' 和 'm' 字符串编码都是不区分大小写的值此处的条件 'M' MATCHES 'm' 对 NCHAR 或 NVARCHAR 列计算为真。
每个创建有 NLSCASE INSENSITIVE 属性的数据库存储大小写的 NCHAR 和 NVARCHAR 字母,正如它们被加载到它们的表中一样;查询返回的任何未更改的记录都具有原始字母。然而,在所有的对 NCHAR 和 NVARCHAR 值的操作(例如:排序、分组或标识重复行)中,数据库服务器会忽略字母大小写的变化,例如:字符串 'Mi' 和 'mI' 的值是一样的。有关字母大小写的信息没有被丢弃,但是当数据库服务器处理 NLS 数据类型时仍不会使用这些信息。
当在 CREATE DATABASE 语句中包含 NLSCASE INSENSITIVE 关键字作为其最后的指定时,数据库服务创建处理以下字符串类型时不考虑字母大小写的数据库:
CREATE DATABASE stores IN dbsp2 WITH BUFFERED LOG NLSCASE INSENSITIVE;
要在区分大小写的数据库的 NCHAR 或 NVARCHAR 数据类型的字符串上执行区分大小写操作,您必须显式地将字符串强制转型成 CHAR 、LVARCHAR 或 VARCHAR 数据类型,然后再执行区分大小写操作。
在区分大小写的数据库中,当一个查询调用聚集函数或者对 NCHAR 或 NVARCHAR 列包含 GROUP BY 子句时,数据库服务器将数据库中的大小写字母作为重复的值,程序片段示例如下。
CREATE DATABASE casedb WITH LOG NLSCASE INSENSITIVE; CREATE TABLE foo (cc CHAR(5), nc NCHAR(5)); INSERT INTO foo VALUES ('IBM', 'iBM'); INSERT INTO foo VALUES ('ibm', 'ibM'); INSERT INTO foo VALUES ('ibm', 'ibM'); INSERT INTO foo VALUES ('Ibm', 'Ibm'); SELECT COUNT(nc) FROM foo GROUP BY nc; SELECT COUNT(nc) FROM foo WHERE nc = 'ibm' GROUP BY nc;
在以上两条查询中,COUNT 聚集函数都返回 4 ,是 INSERT 语句加载到 foo 中的总行数。因为 nc 列是 NLS 数据类型,所有的行都满足 WHERE 子句中的 nc = 'ibm' 条件,尽管在 nc 值中有字母大小写的变化。
SELECT nc FROM foo GROUP BY nc;输出可能是来自 INSERT 语句的任何字符串值(亦即 'IBM' 、'iBM' 、'ibm' 、'ibM' 或 'Ibm'),这取决于服务器处理或扫描行的顺序。
SELECT DISTINCT nc FROM foo;此处返回一行,因为从 NLSCASE INSENSITIVE 角度来看,所有的行具有相同的值,尽管在字母大小写上有变化。正如先前的示例,从插入的行中检索到的第一行将由查询返回。
SELECT COUNT(DISTINCT nc) FROM foo;此处还是返回计数 1,因为在此不区分大小写的数据库中,foo 表中所有的行都评估为重复行。
-26801 Cannot reference an external database that is not case sensitive.
-26802 Cannot reference an external database that is case sensitive.唯一的例外是,NLSCASE 设置不会阻止同一 GBase 8s 数据库服务器实例到区分大小写系统数据库(例如 sysmaster 、sysadmin 、sysutils 、sysusers 和 syscdr)的连接。存取系统数据库操作的结果依赖于其它数据库中的 NLSCASE 设置。