Firebird数据库
Firebird数据库语言-排序规则
2016-07-04 12:14:22


创建排序规则 CREATE COLLATION
作用: 为被支持的字符集制作一个新的排序规则用于数据库中。
用于: DSQL
语法:

 

CREATE COLLATION collname
FOR charset
[FROM basecoll | FROM EXTERNAL ('extname')]
[NO PAD | PAD SPACE]
[CASE [IN]SENSITIVE]
[ACCENT [IN]SENSITIVE]
[''];
::= [; ...]
::= attrname=attrvalue

 

表 5.41. CREATE COLLATION 语句参数

 

 CREATE COLLATION 语句并没有创建"任何"东西:其目的是使得排序规则对数据库而言是已知的。这个排序规则必须已经存在于当的系统上,通常在一个库文件,且必须正确地在Firebird安装目录下的子目录intl中一个.conf文件注册。
该排序规则可以基于已存在于数据库中的一种。

 

如果目前没有 FROM 子句,Firebird将在intl子目录中扫描.conf 文件,为CREATE COLLATION对象所指定的排序规则名。换句话说,省略 FROM basecoll 子句是等效于指定FROM EXTERNAL ('collname')。

 

使用单引号‘extname’是区分大小写的,必须严格地对应在.conf文件中的排序规则名。collname、charset和basecoll参数不区分大小写的,除非用双引号。

 

可用的特定属性列在下面的表格中。并不是所有的特定属性都适用于每一个排序规则,即使指定它们不会引起错误。

 


    
在表中,"1 bpc"表示一个属性是有效的每个字符使用1字节的字符集的排序规则(所谓的窄字符集)。"UNI"是"Unicode排序规则"。

表 5.42. 特定的排序规则属性

 

小技巧
如果想添加一个新的字符集,将其设置为数据库中默认的排序规则,声明且运行存储过程sp_register_character_set(name, max_bytes_per_character),在Firebird安装目录下的misc/intl.sql文件中。

 

注意: 为了使这个工作,字符集必须在当前系统中且在注册子目录intl中一个.conf文件中。

 

所有连接到数据库的用户都能使用CREATE COLLATION来增一个新的排序规则

 

使用例子CREATE COLLATION:
1. 创建一个排序规则,使用基于fbintl.conf文件中的名称(区分大小)
CREATE COLLATION ISO8859_1_UNICODE FOR ISO8859_1;

 

2.创建一个排序规则,使用特殊(用户自定义)的名称("external"名称必须完全匹配fbintl.conf文件中的名称)
CREATE COLLATION LAT_UNI
FOR ISO8859_1
FROM EXTERNAL ('ISO8859_1_UNICODE');

 

3.创建不区分大小写的排序规则,基于已存在于现有数据库中的。
CREATE COLLATION ES_ES_NOPAD_CI
FOR ISO8859_1
FROM ES_ES
NO PAD
CASE INSENSITIVE;

 

4.创建不区分大小写的排序规则,基于已存在于现有数据库中的并指定属性 .
CREATE COLLATION ES_ES_CI_COMPR
FOR ISO8859_1
FROM ES_ES
CASE INSENSITIVE
'DISABLE-COMPRESSIONS=0';

 

5. 创建不区分大小写的排序规则由编号的值 (所谓的自然排序规则).
CREATE COLLATION nums_coll FOR UTF8
FROM UNICODE
CASE INSENSITIVE 'NUMERIC-SORT=1';
CREATE DOMAIN dm_nums AS varchar(20)
CHARACTER SET UTF8 COLLATE nums_coll; -- original (manufacturer) numbers
CREATE TABLE wares(id int primary key, articul dm_nums ...);

 

参阅: DROP COLLATION