7.1.?区域支持

7.1.1. 概述
7.1.2. 行为
7.1.3. 问题

区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。UXDB使用服务器操作系统提供的标准ISO C和POSIX的区域机制。更多的信息请参考你的系统的文档。

7.1.1.?概述

区域支持是在使用initdb创建一个数据库集群时自动初始化的。默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库集群;因此如果你的系统已经设置为你的数据库集群想要使用的区域, 那么你就没有什么可干的。如果你想使用其它的区域(或者还不知道你的系统设置的区域是什么),可以用--locale选项准确地告诉initdb要用哪一个区域。 比如:

initdb --locale=sv_SE

这个Unix系统上的例子把区域设置为瑞典(SE)瑞典语(sv)。其他的可能性包括 en_US(美国英语)和fr_CA(加拿大法语)。如果有多于一种字符集可以用于区域,那么声明可以采用如下的形式:language_territory.codeset。例如fr_BE.UTF-8表示在比利时(BE)地区使用的法语(fr),使用一个UTF-8字符集编码。

在你的系统上有哪些区域可用取决于操作系统提供商提供了什么以及安装了什么。在大部分Unix系统上,命令locale -a将提供所有可用区域的列表。Windows使用更详细的区域名称,例如German_Germany或者Swedish_Sweden.1252,但是其原则是相同的。

有时候,把几种区域规则混合起来也很有用,例如,使用英语排序规则而用西班牙语消息。为支持这些,澳门游戏平台注册网站有一套区域子类用于控制本地化规则的某些方面:

LC_COLLATE字符串排序顺序
LC_CTYPE字符分类(什么是字符?是否区分大小写?)
LC_MESSAGES消息的语言
LC_MONETARY货币金额的格式
LC_NUMERIC数值格式
LC_TIME日期和时间格式

这些类名转换成initdb的选项名来覆盖某个特定类的区域选择。例如,要把区域设置为加拿大法语,但使用美国的货币格式化规则,可以使用:

initdb --locale=fr_CA --lc-monetary=en_US

如果想要的系统表现得像没有区域支持一样,那么使用特殊的区域名C或者等效的POSIX

一些区域分类的值必需在数据库被创建时的就被固定。你可以为不同的数据库使用不同的设置,但是一旦一个数据库被创建,你就不能在数据库上修改这些区域分类的值。LC_COLLATELC_CTYPE就是这样的分类。它们影响索引的排序顺序,因此它们必需保持固定, 否则在文本列上的索引将会崩溃(但是你可以使用排序规则放松这种限制,讨论见第?7.2?节)。这些分类的默认值在initdb运行时被确定,并且这些值在新数据库被创建时使用,除非在CREATE DATABASE命令中特别指定。

其它区域分类可以在任何时候被更改,更改的方式是设置与区域分类同名的服务器配置参数(详见第?3.11.2?节)。被initdb选中的值实际上只是被写入到配置文件uxsinodb.conf中作为服务器启动时的默认值。如果你将这些赋值从uxsinodb.conf中除去,那么服务器将会从其执行环境中继承该设置。

请注意服务器的区域行为是由它看到的环境变量决定的,而不是由任何客户端的环境变量影响的。因此,澳门游戏平台注册网站要在启动服务器之前认真地设置好这些变量。这样带来的一种可能是如果客户端和服务器设置成不同的区域,那么消息可能以不同的语言呈现,实际情况取决于消息的来源。

注意

澳门游戏平台注册网站谈到从执行环境继承区域,意思是在大多数操作系统上的下列动作:对于一个给定的区域分类(比如排序规则),按照下面的顺序评估这些环境变量,直到找到一个被设置了的:LC_ALLLC_COLLATE(或者对应于相应分类的变量)、LANG。如果这些环境变量一个都没有被设置,那么将区域缺省设置为C

一些消息本地化库也查看环境变量LANGUAGE,它覆盖所有其它用于设置消息语言的区域设置。如果有疑问,请参考操作系统的文档,特别是有关gettext的文档。

要允许消息被翻译成用户选择的语言,数据库默认是开启支持的,所有其他区域支持都会被自动编译。

7.1.2.?行为

区域设置特别影响下面的SQL特性:

  • 在文本数据上使用ORDER BY或标准比较操作符的查询中的排序顺序

  • 函数upperlowerinitcap

  • 模式匹配操作符(LIKESIMILAR TO和POSIX风格的正则表达式);区域影响大小写不敏感匹配和通过字符类正则表达式的字符分类

  • to_char函数族

  • LIKE子句使用索引的能力

UXDB中使用非C或非POSIX区域的缺点是性能影响。它降低了字符处理的速度并且阻止了在LIKE中对普通索引的使用。因此,只能在真正需要的时候才使用它。

为允许UXDB在非C区域下的LIKE子句中使用索引, 有多个自定义操作符类可用。这些操作符类允许创建一个严格地比较每个字符的索引。另一种方法是创建使用C排序规则的索引,如第?7.2?节所讨论的。

7.1.3.?问题

如果经过上面解释后区域支持仍然不能运转,那要检查一下操作系统的区域支持是否正确配置。要检查某个区域是否安装并且正常运转,可以使用命令locale -a(如果你的操作系统提供了该命令)。

请检查核实UXDB确实使用认为它该用的区域设置。LC_COLLATELC_CTYPE的设置都是在数据库创建时决定的,不能被改变除非创建新的数据库。其它的区域设置包括 LC_MESSAGESLC_MONETARY都是由服务器的启动环境决定的,但是可以在运行时修改。可以用SHOW命令检查数据库正在使用的区域设置。

源码发布中的src/test/locale中包含UXDB的区域支持的测试套件。

那些通过解析错误消息文本处理服务器端错误的客户端应用很明显会有问题,因为服务器信息可能会以不同的语言表示。澳门游戏平台注册网站建议这类应用的开发人员改用错误代码机制。

XML 地图 | Sitemap 地图