支援的版本:目前 (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 子句表示此轉換是特定來源到目標編碼的預設值。對於編碼對,綱要中應該只有一個預設編碼。

名稱

轉換的名稱。 轉換名稱可以使用綱要限定。 如果不是,則在目前的綱要中定義轉換。 轉換名稱在綱要中必須是唯一的。

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 建立從編碼 UTF8LATIN1 的轉換

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

相容性

CREATE CONVERSIONPostgreSQL 擴充功能。 SQL 標準中沒有 CREATE CONVERSION 語句,但是有一個 CREATE TRANSLATION 語句,其目的和語法非常相似。

提交更正

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