SQL_LOGICAL_CHAR 配置参数

使用 SQL_LOGICAL_CHAR 配置参数来启用或禁用在内建的字符数据类型声明中大小规格的扩展。

onconfig.std 值
SQL_LOGICAL_CHAR OFF( = 以字节为单位解释大小规格)
OFF = 声明的大小无扩展。

1 = 声明的大小无扩展。

2 = 使用 2 作为声明的大小的扩展因子。

3 = 使用 3 作为声明的大小的扩展因子。

4 = 使用 4 作为声明的大小的扩展因子。

ON = 使用 M 作为扩展因子,此处 M 是在当前数据库代码集中任何逻辑字符需要的以字节记的最大长度。依赖于 DB_LOCALE 设置, M 有一个从 1(单字节语言环境中)直至 4 的整数范围。

生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。

用法

对于在单语言环境中开发但是在多语言环境中部署的应用,这个特性可降低在数据条目操作期间截断多字节逻辑字符的风险。

在诸如 UTF-8 这样的单字节代码集中,或一些东亚语言的多字节代码集中,单个逻辑字符可要求多于一个字节的存储。设置这个参数可以指导 SQL 分析器将逻辑字符语义应用到这些内建的字符数据类型的声明:
  • CHAR
  • CHARACTER
  • CHARACTER VARYING
  • LVARCHAR
  • NCHAR
  • NVARCHAR
  • VARCHAR
  • DISTINCT 类型,声明任意这些数据类型作为基本类型
  • ROW 类型(命名的和未命名的),包括这些数据类型的域
  • 集合类型(LIST、MULTISET 或 SET),包括这些类型作为元素。

您为这个参数指定的设置必须是下列值之一:

SQL_LOGICAL_CHAR 配置参数是否设置为启用或禁用声明的存储大小的扩展,对于 GBase 8s 实例的所有会话,其设置指定数据类型声明如何解释。

扩展因子的自动调整大小

当 SQL_LOGICAL_CHAR 设置为有效的数字,且当前会话创建数据库时, GBase 8s 比较 SQL_LOGICAL_CHAR 值与任何逻辑字符将用于数据库的代码集的最大字节数。

如果 SQL_LOGICAL_CHAR 设置大于最大字节数,则数据库使用语言环境的最大值作为新的扩展因子,取代配置文件指定的因子。在配置文件中的 SQL_LOGICAL_CHAR 设置保持不变,继续作为其他用户数据库的缺省扩展因子发挥作用。

类似地,如果会话的 SQL_LOGICAL_CHAR 值自动地重置为一个数字,如上所述,但同一会话随后连接到另一个数据库,其语言环境使用一个代码集,在该代码集中逻辑字符要求比当前扩展因子更大的存储大小, 则在用户会话连接到那个数据库时, GBase 8s 使用新代码集的最大字节数作为新的扩展因子,而不使用 SQL_LOGICAL_CHAR 的当前设置。

扩展因子的自动重置以匹配代码集中最大的逻辑字符大小,在连接时 DB_LOCALE 指定该代码集,当 SQL_LOGICAL_CHAR 设置为 ON 时也会发生,但是, 当 SQL_LOGICAL_CHAR 以两种方式设置为数字(1、2、3 或 4)时,ON 的影响与对数据库服务器行为的影响不相同:
  • 如果 SQL_LOGICAL_CHAR 设置为 ON,则扩展因子可自动地重置为较小的值。
  • SQL_LOGICAL_CHAR = 4SQL_LOGICAL_CHAR = ON 之间没有不同。

如果当前会话连接到一个数据库时,该数据库在 DB_LOCALE 代码集中的最大逻辑字符要求一个比当前 SQL_LOGICAL_CHAR 设置更小的字节数,则必须设置 SQL_LOGICAL_CHAR 为 ON,而不是一个数字。有效的扩展因子将总是小于或等于语言环境的最大字符大小。