机械装备 数据库Informix

informix支持中文问题汇总

Online在5版本时可以存储任何字符串,包括所有中文字符串与英文字符串,不加任何限制,不需安装其它附加产品,不必设置其它环境变量。
  Online 在7.2版以前遵从X/Open的NLS(Native  Language  Support)的标准支持中文(XPG3 规范),不必安装附加语言支持产品。这是一种单字节的支持方式,前提是操作系统也要支持NLS,换句话说,Online是基于操作系统支持中文的。一般设 置操作系统环境变量LANG之后,重新启动Online后,原来的数据库即可处理中文,有时也要设DBNLS环境变量。不同的操作系统的LANG的设置方 法一般不同,下面列出HP和SCO上的设法:
  SCO  UNIX:export  LANG =  english_us.8859
  HP-UX:  export  LANG =  en_US.iso88591  
  ONLINE 在7.2以上版本采用GLS(Global  Language  Support)的方式支持中文,GLS是基于 X/Open的XPG4规范之上开发的,这是一种多字节的全球语言支持方式。在安装完Online之后,必须正确安装Informix   -  Language  Supplement  ZHCN产品,并设置适当的环境变量,然后启动 ONLINE,重新建立数据库,才可处理汉字。方法如下:
  1)按照INFORMIX产品安装方法,最后安装Informix  Language  Supplement  ZHCN。
  2)一般设置下面三个环境变量:
  export  DB_LOCALE=zh_CN.gb
  export  CLIENT_LOCALE=zh_CN.gb
  export  SERVER_LOCALE=zh_CN.gb
  除了这三个环境变量之外,DBLANG=en_us.8859-1可以指定Informix产品内部使用英文。
  3)正常启动ONLINE。
  4)重新建立数据库
  本技术说明使用的术语和首字母缩略词包括:
  GLS
  全球语言支持(Global  Language  Support)。
  语言环境(Locale)
  语言、地域和代码集
  本地化(Localize)
  使软件用于特定的语言环境
  国际化(Internationalize)
  使软件用于任何语言环境
  UDR
  用户定义的例程
  简介
  国际化的用户定义的例程(UDR)无需修改和重新编译源代码即可支持不同的语言和文化约定。
  Informix  GLS 库是一个  API,它让  UDR 处理单字节和多字节字符并管理日期、时间和数值的不同数据格式。 GLS 函数可以在运行时访问特定于语言环境的信息,因而  UDR 无需知道客户机的语言环境,就可以让客户机采取正确的行为。
  本技术说明突出说明了实现国际化的  UDR 时要考虑的问题,并指出了您可能要为特定语言额外提供的支持。
  GLS 概述与定义
  全 球语言支持(Global  Language  Support (GLS))是允许  Informix 产品、单个应用程序或  UDR 支持多种语言的  Informix 特性。本节概述了一些重 要术语。
  GLS 语言环境
  对应于语言、地域和代码集:
  语言(language)指定可以使用的字符种类、如何对字符进行排序和比较、字母大小写转换和消息。
  地域(territory)确定日期、时间、货币和数字的格式。
  代码集(code  set)包括单字节和多字节字符串处理,以及同一字符在客户机和服务器上不同表示法之间的代码集转换。
  缺省的  Informix 语言环境如下:
  en_us.8859-1  UNIX  8859-1 是  ISO8859-1 代码集。
  en_us.1252  Windows  1252 是  Microsoft 代码集。
  ISO8859-1 代码集有另外一些形式。0333 是其精简形式,而  IBM 又将  ISO8859-1 注册为  CCSID  819。因此以下三种语言环境指的是同一代码集:
  en_us.8859-1
  en_us.0333
  en_us.819
  Informix 使用以下环境变量来指定语言环境:
  CLIENT_LOCALE 客户机应用程序使用的语言环境。
  DB_LOCALE 数据库中数据的语言环境。
  SERVER_LOCALE 数据库服务器用于其特定于服务器的文件的语言环境。
  国际化
  指的是实现产品(如  DataBlade 模块),以便它们与语言无关。国际化的  UDR 无需更改或重新编译源代码即可支持不同语言、地域和代码集。
  Informix 服务器是国际化的产品。Informix  GLS 库提供了一些函数,以使  DataBlade 模块和客户机应用程序能使用  GLS 语言环境中的信息来:
  处理单字节和多字节字符
  格式化日期、时间和数值数据
  本地化
  指的是在运行时解析特定语言环境的信息,以使国际化的产品针对该语言环境正确执行;例如,本地化的应用程序使用户能看到用他们自己的语言显示的错误消息和用他们期望的格式显示的日期。
  对 特定语言环境的支持集中在一组文件中。(特定于语言环境的  DataBlade 消息存储在系统目录中)。UNIX  glfiles 命令会输出  UNIX 系统支持的语言环境的列表。对于  Informix 分发版中没有包括 的语言环境,International  Language  Supplement 提供语言环境、代码集转换和已翻译 的用户界面与文档。
  尽管本技术说明主要讨论  UDR 实现,但  DataBlade 开发人员也需要考虑任何客户机组件的国际化,这些组件是作为  DataBlade 模块的一部分而包括在模块中的。
  GLS 产品
  GLS 文档
  DataBlade 开发人员需要以下文档:
  Informix  Guide  to  GLS  Functionality
  这是实现支持  GLS 的产品的核心文档。
  Informix  GLS  Programmer's  Manual
  该手册描述如何使用  Informix  GLS  API 调用。
  GLS documentation  and  Release  Notes
  请常常查看最新的分发版以获得新的信息:
  $INFORMIXDIR/release
  Informix  DataBlade  API  Programmer's  Manual
  讨论用于产生错误和输出跟踪消息的  GLS 特性。
  DataBlade  Developers  Kit  User's  Guide
  DBDK 生成使用  GLS 调用的源代码。
  
  DataBlade 开发人员需要什么  Informix 产品?
  您需要以下  Informix 产品来实现支持多语言的  DataBlade 模块:
  Informix  Dynamic  Server
  DataBlade  Developers  Kit
  BladeSmith 生成使用多个  GLS 库函数的代码,包括用于异常处理和跟踪的函数。
  Client  Software  Development  Kit
  International  Language  Supplement (ILS),用于所有您计划支持但缺省分发版没有包括的语言环境(用  glfiles 命令检查),以使您能在每个语言环境中测试  blade 的行为。
  您还需要前面的  GLS 文档一节中列出的文档。
  客户需要什么  Informix 产品?
  您的客户需要以下产品以在其语言环境中运行您的  DataBlade 模块:
  Informix  Dynamic  Server
  您的  DataBlade 模块
  用于客户的语言环境的  International  Language  Supplement (ILS)(如果它尚未包括在分发版中的话)。
  客户还必须通过适当地设置  CLIENT_LOCALE 和  DB_LOCALE 环境变量来正确地设置其  GLS 环境。
  什么需要国际化/本地化?
  DataBlade  模块开发人员必须同时解决国际化问题与本地化问题。首先,您需要实现  UDR 以使其与语言无关。也就是说,对于其要处理的数据, DataBlade 模块不对在运行时使用的语言、地域或代码集做任何假定。因此您就需要将任何与语言有关的部分(如错误消息)移植到您希望支持的每一个 语言环境。本节概述了一些问题。
 
参与2

2 同行回答

wanweifeng wanweifeng 软件开发工程师 未知
这篇文章很多地方有,确实能解决问题。显示全部
这篇文章很多地方有,确实能解决问题。 收起
软件开发 · 2011-04-22
浏览457
mj001 mj001 业务经理 工行
 文本  I/O   Informix  GLS 库提供这样的函数,它们使用当前正在处理的语言环境中的信息来扫描和格式化多字节字符串、日期、数字和货币。使用这些函数来解析输入字符串或格式化输出字符串。它们在以下文档中有描述:   Informix  Guide...显示全部
 文本  I/O
  Informix  GLS 库提供这样的函数,它们使用当前正在处理的语言环境中的信息来扫描和格式化多字节字符串、日期、数字和货币。使用这些函数来解析输入字符串或格式化输出字符串。它们在以下文档中有描述:
  Informix  Guide  to  GLS  Functionality
  Informix  GLS  Programmer's  Manual
  在何处将这一点应用到  UDR 的示例是对  opaque 类型外部(基于字符)格式的处理。
  DBDK 为  opaque 类型输入/输出支持函数生成代码,该代码在  GLS 文本与  opaque 类型内部二进制表示法之间进行转换。
  mi_get_string() 和  mi_put_string()  DataBlade  API 函数自动对字符串/文本数据执行代码集转换。
  (对于数值数据的二进制传送,mi_put_* 和  mi_get_* 函数 — 用于  opaque 类型发送/接收支持函数 — 也会自动执行代码集转换)。
  错误消息
  syserrors  系统目录表存储  DataBlade 异常消息,这些消息可以通过向  mi_db_error_raise() 传递   MT_SQL 消息类型来产生。每个错误消息项都有与之相关的语言环境。当错误被产生时,服务器会设法将  CLIENT_LOCALE 与  syserrors 中的一个错误匹配。它首先进行显式匹配,如果找不到匹配的对象,则以下列 次序进行搜索,尝试部分匹配:
  确切的客户机语言环境
  例如:es_es.8859-1
  客户机语言环境的语言 + 地域
  例如:es_es
  仅客户机语言环境的语言
  例如:es
  缺省(en_us)语言环境
  UNIX 上的  en_us.8859-1,以及  NT 上的  en_us.1252。
  解析出最终缺省  en_us 语言环境的方法取决于用户是否设置了  CLIENT_LOCALE:
  如果未设置  CLIENT_LOCALE,则根据语言环境的部分匹配得出缺省语言环境。
  如果  en_us.1252(NT)错误位于  UNIX 服务器上的  syserrors 表中,则根据  en_us 部分匹配查找消息。
  如果设置了  CLIENT_LOCALE,则根据对该平台的完全匹配解析出缺省语言环境。
  如果  en_us.1252(NT)错误位于  UNIX 服务器上的  syserrors 表中,则将根据  en_us.8859-1 的完全匹配查找语言环境,从而产生 "Message  cannot  be  found" 错误。
  服 务器的  9.2 发行版都将执行  en_us 语言环境的部分匹配,而不管是否设置了  CLIENT_LOCALE。同时,要意识到  BladeSmith 缺省时生成语言环境为  en_us.1252 的消息。如果您的目标是  UNIX 系统,请将语言环境更改为  en_us.8859- 1。如果您计划支持  NT 和  UNIX,请同时向两个语言环境注册同一错误消息。
  您还可以将   DataBlade 异常消息翻译成您打算支持的各种特定语言,并将这些消息存储在  syserrors 系统目录 表。(顺便说一下,如果您希望使用  UDR 插入本地化的消息,请参阅下面的“从  UDR 将本地化错误消息插入到   syserrors 中”一节)。
  请参阅  Informix  DataBlade  API  Programmer's  Manual 中“Exception  Raising”一节和下面的示例。
  跟踪消息
  systracemsgs 系统目录存储可以用  gl_tprintf() 输出的  DataBlade 跟踪消息。除了翻译所有要显示给最终用户的跟踪消息以外,请务必提供  en_us 缺省消息。
  请参阅  Informix  DataBlade  API  Programmer's  Manual 中的“DataBlade  API  Support  for  an  Internationalized  UDR”一节。
  查询处理
  Informix 支持用于数据库对象的名称(如表和列)的多字节字符。当然,表可以在  NCHAR 和  NVARCHAR 列中存储包含多字节字符的值。
  检 查使用  mi_exec() 或  mi_exec_prepared_statement() 执行  SQL 查询的任何  UDR。如果查询可以访问用户定义的数据库对象或获取用户提供的数据,则  UDR 应该在 创建  SQL 语句和获取查询结果时准备好处理非  ASCII 字符。
  示例
  错误消息
  RGBA  DataBlade 模块实现管理计算机颜色的  opaque 类型。
  用 于  RGBA 的输入函数将外部(文本)表示法转换成内部的  C 数据结构。当填充了  C 结构后, DataBlade 代码会检查每个元素是否在  0-255 内。如果用户输入  256,则根据用户的语言环境会产生与 下面相似的错误:
  语言环境 错误消息
  en_us.1252 (URGB1)  -  RGBAInput:  R value  256  is  not  within  the  valid  range  of  0-255.
  es_es.8859-1 (URGB1)  -  RGBAInput:  el  valor  R  256  no  calza  entre  los  limites  de  0-255.
  本节描述源代码需要做什么、要将什么消息存储在  syserrors 表中,以及数据库服务器如何决定输出哪个错误。
  下面的代码演示输入函数如何检查  RGBA 的红色部分以及如何产生错误。
  if(Gen_RetVal->red <  0 ||  Gen_RetVal->red >  255)
  mi_db_error_raise
  (
  Gen_Con, /*  Connection  handle */
  MI_SQL, /*  Message  type */
  "URGB1", /*  SQLSTATE  in  syserrors */
  "FUNCNAME%s", /*  token  takes  string */
  "RGBAInput", /* value  for  FUNCNAME */
  "value%d", /*  token  takes  an  integer */
  (mi_integer)  Gen_RetVal->red, /* value  for value  token */
  NULL /*  No  more  tokens */
  );
  mi_db_error_raise () 调用中的  MI_SQL 消息类型表明应该根据第三个参数中的  SQLSTATE 值在  syserrors 系统目录表中查找错误。如果我们从  syserrors 系统目录进行选择,我们会看到有两个不同的 “URGB1”错误:
  >  select *  from  syserrors  where  sqlstate='URGB1';
  sqlstate  URGB1
  locale  en_us.1252
  level  0
  seqno  1
  message %FUNCNAME%:  R value %value%  is  not  within  the  valid  range  of  0-255.
  sqlstate  URGB1
  locale  es_es.8859-1
  level  0
  seqno  1
  message %FUNCNAME%:  el  valor  R %value%  no  calza  entre  los  limites  de  0-255.
  用以下  SQL 插入(insert)语句将这些异常消息插入到  syserrors 系统目录表中:
  insert  into  informix.syserrors (level,  seqno,  sqlstate,  locale,  message)
  values
  (
  0,
  1,
  "URGB1",
  "en_us.1252",
  "%FUNCNAME%:  R value %value%  is  not  within  the  valid  range  of  0-255."
  );
  insert  into  informix.syserrors (level,  seqno,  sqlstate,  locale,  message)
  values
  (
  0,
  1,
  "URGB1",
  "es_es.8859-1",
  "%FUNCNAME%:  el  valor  R %value%  no  calza  entre  los  limites  de  0-255."
  );
  RGBA 收起
机械装备 · 2010-08-24
浏览457

提问者

mj001
业务经理 工行
评论23

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2010-08-24
  • 关注会员:0 人
  • 问题浏览:2009
  • 最近回答:2011-04-22
  • X社区推广