土耳其语中有两种看起来像字母 I 的形式。一种形式称为 I-dot,如下所示:
第二种形式称为 I-no-dot,如下所示:
虽然这些字母看似同一字母的变体,但在土耳其语字母表中,它们被视为截然不同的字母。为了支持这些变体,SQL Anywhere 提供了土耳其语归类 1254TRK。
土耳其语中这些字符的大小写转换规则与 ANSI SQL 中的大小写转换标准规则不兼容。例如,在土耳其语中与 I
等同的小写形式为:
但是,在 ANSI 标准中则为:
因此,不区分大小写的匹配正确与否取决于要匹配的文本是土耳其语还是英语/ANSI。在许多环境下,并没有足够的信息来进行这样的区分,这就导致此类数据库中的一些非标准行为。
例如,请考虑针对使用 1254TRK 归类的数据库执行的以下语句:
第一条语句引用了一个系统对象,并且需要用 ANSI SQL 转换规则来匹配该名称。第二条语句引用了一个用户对象,并且需要用土耳其语转换规则来匹配该名称。但是,数据库服务器只有在知道对象是什么后才能告知要使用的转换规则,而它只有在知道要使用的转换规则之后才能知道对象是什么。无法为系统和用户对象正确解决此问题。在此示例中,由于数据库服务器使用的是土耳其语归类 1254TRK,因此第一条语句会失败,因为系统并不认为小写 I 等同于大写 I。而第二条语句则会成功。
土耳其语标准与 ANSI 标准的不兼容性要求土耳其语数据库中的系统对象引用必须以正确的大小写形式(即,对象创建时使用的大小写形式)指定对象名。应按如下方式编写上面的第一条语句:
事实上,仅字母 I 必须采用正确的大小写形式。
或者,按如下方式编写该语句也是可以接受的,不过并不常见:
请注意,诸如 INSERT 等关键字不区分大小写,即使在土耳其语数据库中也是如此。SQL Anywhere 知道所有关键字均仅使用英语字母,所以它在匹配关键字时会使用 ANSI 大小写转换规则。SQL Anywhere 还会将此规律应用于其它一些标识符,如内置函数。不过,名称存储在目录中的对象必须使用正确的大小写形式或字母指定,如上所述。要确定正确的大小写形式,请在定义系统对象的系统视图中查找。请参见系统视图。
不区分大小写的土耳其语数据库中的数据
替代土耳其语归类 1254TRKALT
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |