我将DB_LOCALE
环境变量设置为en_US.57372
后,尝试重新启动Informix IDS数据库。但是,当我尝试在sysmaster上运行查询时,
选择tabname,从informix.systables中选择站点,其中tabname如'%GL_%';它给了我
tabname GL_COLLATE
site en_US.819
tabname GL_CTYPE
site en_US.819
现在,数据库实例未启动,因为它抱怨
Error 23197: Database locale information mismatch.
我没有安装数据库服务器,但是我假设它是使用默认排序规则安装的。我也应该将GL_COLLATE
和GL_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-1
或en_US.0333
或en_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
数据库的语言环境,但是我已经没有尝试过。