character varying
与text
作为 db 函数参数的类型之间是否有任何显着差异(例如性能) ?我有 2 个使用示例:
示例 1:
CREATE OR REPLACE FUNCTION func1(table_name <character varying|text>)
RETURNS integer AS $$
DECLARE
RESULT integer;
BEGIN
EXECUTE 'SELECT COUNT(*) FROM ' || table_name INTO result;
RETURN result;
END;
$$ LANGUAGE plpgsql;
示例 2:
CREATE OR REPLACE FUNCTION func2(filter_value <character varying|text>)
RETURNS integer AS $$
DECLARE
RESULT integer;
BEGIN
SELECT COUNT(*) INTO RESULT FROM <some_table> WHERE <some_column> = filter_value;
RETURN result;
END;
$$ LANGUAGE plpgsql;
注意在第二个例子中,some_column
类型是text
iffilter_value
是类型character varying
,反之亦然
在性能方面,这些数据类型完全相同,直至 C 中的实现。
如果有疑问,请使用
text
, 因为这是其类型类的首选类型,并且函数的数据类型解析规则会将所有未知字符串隐式解析为。你经常不得不使用显式类型转换。text
character varying