CREATE CONVERSION

定义一种新的编码转换。

概要

CREATE [DEFAULT] CONVERSION <name>
     FOR <source_encoding> TO <dest_encoding> FROM <function_name>

描述

CREATE CONVERSION 用于定义字符集编码之间的新转换规则。标记为 DEFAULT 的转换规则可用于客户端与服务器之间的自动编码转换。为此,必须同时定义从编码 A 到编码 B 的转换规则,以及从编码 B 到编码 A 的转换规则。

创建转换规则时,必须对该函数拥有 EXECUTE 权限,并对目标模式拥有 CREATE 权限。

参数

  • DEFAULT
    • 表示此转换是该特定源到目标编码的默认设置。在编码对的架构中,应仅存在一个默认编码。
  • name
    • 转换的名称。转换名称可以是带模式限定的。如果未指定模式,则该转换定义在当前模式中。转换名称在同一模式内必须唯一。
  • source_encoding
    • 源编码名称。
  • dest_encoding
    • 目标编码名称。
  • function_name
    • 用于执行转换的函数。函数名可以是带模式限定的。如果未指定模式,则会在路径中查找该函数。该函数必须具有以下签名:
      conv_proc(
      integer,  -- source encoding ID
      integer,  -- destination encoding ID
      cstring,  -- source string (null terminated C string)
      internal, -- destination (fill with a null terminated C string)
      integer   -- source string length
      ) RETURNS void;

注意

使用 DROP CONVERSION 删除用户定义的转换。

创建转换所需的权限可能在功能版本发布时发生变更。

请注意,在本版本数据库中,用户自定义转换中使用的用户自定义函数必须定义为IMMUTABLE。所有自定义函数的编译代码(共享库文件)必须放置在数据库阵列中每个主机(协调节点及所有分区节点)的相同位置。该位置还必须位于LD_LIBRARY_PATH环境变量中,以便服务器能够定位这些文件。

示例

使用 myfunc 函数实现从 UTF8 编码转换为 LATIN1 编码:

CREATE CONVERSION myconv FOR 'UTF8' TO 'LATIN1' FROM myfunc;

兼容性

CREATE CONVERSION 是数据库扩展功能。SQL 标准中不存在 CREATE CONVERSION 语句,但存在功能和语法非常相似的 CREATE TRANSLATION 语句。

另见

ALTER CONVERSION, CREATE FUNCTION, DROP CONVERSION