Informix IDS:DB_LOCALE 与 GL_COLLATE、GL_CTYPE

Informix IDS: DB_LOCALE vs GL_COLLATE, GL_CTYPE

我尝试在将 DB_LOCALE 环境变量设置为 en_US.57372 后重新启动 Informix IDS 数据库。 但是,当我尝试 运行 对 sysmaster 的查询时,

select tabname,来自 informix.systables 的站点 where tabname like '%GL_%'; 它给了我

tabname   GL_COLLATE
site     en_US.819

tabname   GL_CTYPE
site     en_US.819

现在,数据库实例没有启动,因为它抱怨

Error 23197: Database locale information mismatch.

我没有安装数据库服务器,但我假设它是使用默认排序规则安装的。我是否也应该将 GL_COLLATEGL_CTYPE 更改为 en_US.57372

当心——雷区!

一般来说,当你创建一个数据库时,DB_LOCALE当时的设置控制了数据库的语言环境。语言环境 en_US.57372 对应于 en_US.utf8。所以,如果数据库是在DB_LOCALE设置为en_US.utf8时创建的,你会看到信息:

SELECT tabid, tabname, site FROM INFORMIX.SysTables WHERE tabname MATCHES '*GL_*';

90  | GL_COLLATE  |en_US.57372
91  | GL_CTYPE    |en_US.57372

如果创建数据库时未设置 DB_LOCALE,或者将其设置为 en_US.8859-1en_US.0333en_US.819,那么您将看到:

90  | GL_COLLATE  |en_US.819
91  | GL_CTYPE    |en_US.819

创建数据库后,您需要使用 DB_LOCALE 的正确设置进行连接;您不能通过使用新环境设置重新启动服务器来更改数据库区域设置。您必须重新创建数据库才能使新设置生效。如果连接到数据库时使用的 DB_LOCALE 设置与创建数据库时使用的设置不匹配,您会 运行 进入您看到的错误。

sysmaster 数据库比较特殊。无论区域设置如何,都可以从任何数据库访问它。但是这些信息不一定容易理解,除非您的实际语言环境与其语言环境相匹配——即 en_US.8859-1,即使在启动服务器时设置了 DB_LOCALE。您必须设置 SERVER_LOCALE(另一个相关的环境变量是 CLIENT_LOCALE — 但目前它不是一个因素)才能有机会更改 sysmaster 的语言环境数据库,但我还没有试验过。