Firebird数据库
Firebird语言参考-字符类数据类型
2016-04-28 15:52:17

 

对于处理字符数据,Firebird有定长CHAR和变长VARCHAR数据类型,存储在这些数据类型中最大文本长度,CHAR为 32,767个字节,VARCHAR为327,65个字节,在这些限制范围内的最大字符数取决于被考虑使用的数据字符集。排序规则序列不会影响此最大值,虽然它可能会影响任何涉及的列的索引的最大大小。

 

如果在定义一个字符对象时没有显示规定字符集,那么将会默认使用数据库建立是使用的字符集,如果数据库没有默认的字符集,那么字段设置字符集为NONE.

 

 

大多数当前的开发工具支持Unicode,在Firdbird中的实现是UTF8和UNICODE_FSS,UTF8 附带了很多语言的排序规则,UNICODE_FSS有更多的限制,在Firebird内部中主要用于存储元数据,请记住一个 UTF8 字符占用 4 个字节,因此,限制了CHAR字段的字符个为8,191(32,767/4).

 

 

      

 

在Firebird中实现了UTF8字符集支持Unicode 标准的最新版本,因此建议其用于国际化的数据库。

 

 

在处理字符串时,就必须牢记客户端连接的字符集。如果存储的数据同客户端连接设置的字符集之间不匹配,那么字符串列输出的结果自动重新编码,当它们在客户端和服务端之间相互传送时。例如,如果在 WIN1251 中创建数据库的编码但 KOI8R 或 UTF8 指定客户端的连接参数,不匹配将是透明的。

 

 

字符集NONE:字符集NONE在Firebird中是一个特殊字符集,它可以是这样的特点每个字节是字符串的一部分,但字符串存储在系统中没有任何线索关于任何字符的构成包括字符编码、排序规则、案例等,是纯粹地未知。这是客户端应用程序处理数据的责任,并提供手段,以某些方式解释字节字符串,对应用程序和人类用户的意义。

 

字符集OCTETS:数据在OCTETS编码中被当作字节,这对一个字符串而言可能不是一个实际的解释.OCTETS提供一种存储二进制数据的方式,它可以是一些Firebird函数的结果。数据库引擎没有概念,在OCTETS中一串位意味着要做什么,而只是存储和检索它,此外,客户端负责验证数据,展示他们的格式,对应用程序是有意义的及其用户从解码和和处理出现的任何异常编码。

 

 

每个字符集有一个默认的排序序列(COLLATE),指定排序顺序。通常,它只不过提供基于字符的数字代码排序和大写数据和小写字符的一个基本的映射。

 

如果某些行为所需的字符串没有提供默认的排序序列和一个合适的选择排序是字符集支持的,COLLATE排序规则子句可以在定义列时指定。COLLATE排序规则子句可以应用在其他上下文中除了列定义外。对于大于/小于比较操作,它可以被增加到一个SELECT语句中的WHERE子句中。

 

如果输出需要用一种特殊的字母顺序排序,或大小写不敏感和适当的排序规则存在,则 COLLATE 子句可以包含 ORDER BY 子句当行被一个字符字段排序时和带上GROUP BY 子句以便于分组操作。

 

 

对于不区分大小写的搜索,在尝试之前匹配UPPER函数可以用来转换搜索参数和搜索字符串为大写:


where upper(name) = upper(:flt_name)

 

对于字符串在字符集中有一个不区分大小写的排序规则有效,你可以简单应用这个排序规则,直接用来比较搜索参数和搜索字符串。例如,使用WIN1251字符集,为此排序PXW_CYRL是不区分大小写的


WHERE FIRST_NAME COLLATE PXW_CYRL >= :FLT_NAME

ORDER BY NAME COLLATE PXW_CYRL

 

参阅: CONTAINING

 

 

下表显示为 UTF8 字符集可能的排序规则序列。

 

表 3.4.字符集UTF8的排序规则序列

 

 

示例:没有考虑大小写或字符加重音的 UTF8 字符集排序规则示例(类似于COLLATE PXW_CYRL)。