客户机应用程序代码集转换

这些主题概述了客户机产品执行的代码集转换。

有关代码集转换的更多一般信息,请参阅执行代码集转换

当以下两个条件都为真时,客户机应用程序自动在客户机和数据库代码集之间执行代码集转换:

客户机应用程序开始执行时,它会比较客户机和数据库语言环境的名称,以确定是否执行代码集转换。如果未设置 CLIENT_LOCALE,客户机应用程序假定客户机语言环境为缺省语言环境。如果未设置 DB_LOCALE,那么客户机应用程序假定数据库语言环境与客户机语言环境(CLIENT_LOCALE 设置的值)相同。

如果客户机和数据库代码集相同,那么无需进行代码集转换。但是,如果代码集不匹配,客户机应用程序必须确定这两个代码集是否可转换。如果客户机可以找到关联的代码集转换文件,那么两个代码集是可转换的。这些代码集转换文件必须存在于客户机计算机上。

在 UNIX™ 上,可以使用 glfiles 实用程序来获得您的 GBase 8s 产品支持的代码集转换的列表。有关更多信息,请参阅 glfiles 实用程序 (UNIX)。有关此目录的更多信息,请参阅代码集转换文件

如果不存在代码集转换文件,那么客户机应用程序在启动时会生成运行时错误,以指示代码集不兼容。如果存在代码集转换文件,客户机应用程序在将数据发送至数据库服务器或从中接收数据时将自动执行代码集转换。

当客户机应用程序执行代码集转换时,它假定:
重要: 在每次发出连接请求之后,检查 SQLWARN 数组的第八个字符字段来查看警告标志。如果两个数据库语言环境不匹配,客户机应用程序可能会不正确地执行代码集转换。客户机应用程序基于 DB_LOCALE 支持的代码集继续执行任何代码集转换。如果您继续进行这样的连接,那么只能靠自己来理解交换中数据的格式。

例如:假设客户机应用程序将 CLIENT_LOCALE 设置为 en_us.1252,并且将 DB_LOCALE 设置为 en_us.8859-1。客户机应用程序确定它必须在 Windows™ 代码页 1252(客户机语言环境中)和 ISO8859-1 代码集(数据库语言环境中)之间执行代码集转换。然后,客户机应用程序将打开具有 fr_fr.8859-1 法语语言环境的数据库。数据库服务器将 SQLWARN 数组的第八个字符字段设置为 W,原因是两种语言环境的语言和地域不同。然后,数据库服务器将数据库语言环境 (fr_fr.8859-1) 用于数据的本地化顺序。

但是,应用程序可能使用此连接。应用程序可以接受此连接,用于接收按法语本地化顺序排序的 NCHAR 和 NVARCHAR 数据。客户机应用程序执行的任何代码集转换仍然有效,因为两个数据库语言环境都支持缺省 ISO8859-1 代码集。

相反,如果应用程序打开具有 SJIS (ja_jp.sjis) 日语语言环境的数据库,那么数据库服务器会设置 SQLWARN 警告标志,原因是语言、地域代码集不同。然后,数据库服务器将 ja_jp.sjis 语言环境用于数据的本地化顺序。

应用程序可能不会继续此连接。客户机应用程序在启动时,已确定需要在 Windows 代码页 1252 和 ISO8859-1 代码集之间进行代码集转换。客户机应用程序将执行此代码集转换直至终止。

在打开具有 ja_jp.sjis 的数据库时,由于代码集不同,客户机应用程序将不正确地执行代码集转换。它将继续在 Windows 代码页 1252 和 ISO8859-1 之间转换,而不是在 Windows 代码页 1252 和日语 SJIS 之间进行转换。这种情况可能会导致数据破坏。
提示: 如果 ESQL/C 客户机应用程序使用代码集转换,您可能需要执行特殊的编程步骤。有关更多信息,请参阅处理代码集转换