2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

CREATE CONVERSION

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

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
    boolean   -- if true, don't throw an error if conversion fails
) RETURNS integer;

返回值是成功轉換的源位元組數。如果最後一個引數為 false,則函式必須在遇到無效輸入時丟擲錯誤,並且返回值始終等於源字串長度。

註釋

源編碼和目標編碼都不能是 SQL_ASCII,因為伺服器對於涉及 SQL_ASCII 編碼 的情況的行為是硬編碼的。

使用 DROP CONVERSION 刪除使用者定義的轉換。

建立轉換所需的許可權可能會在未來版本中更改。

示例

使用 myfunc 從編碼 UTF8 建立到編碼 LATIN1 的轉換

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

相容性

CREATE CONVERSIONPostgreSQL 的一個擴充套件。SQL 標準中沒有 CREATE CONVERSION 語句,但有一個 CREATE TRANSLATION 語句,在目的和語法上與此非常相似。

提交更正

如果您在文件中發現任何不正確之處,與您在使用該特定功能時的體驗不符,或需要進一步澄清,請使用 此表單 報告文件問題。