【IT168 服务器学院】PostgresQL7.3版之后,不再允许空字符串''''作为空值null直接插入数字类型的列中,所以插入数据时经常会出现
ERROR: invalid input syntax for integer: ""
之类的错误,而PostgresQL本身并未提供直接将空字符串自动转换为0或null的函数,这使得写应用程序时非常棘手。
比较标准的解决方法是:
1、在应用程序中控制(废话)
2、在要插入的表上做触发器,自动将''''转换为0或null
3、自定义数据类型,在输入输出函数中自动将''''转换为0或null
4、自定义函数,在应用程序中套在可能会产生''''的字段外面
函数举例:
esin(enpty string is null)
CREATE OR REPLACE FUNCTION esin(text)
RETURNS int4 AS
$BODY$
SELECT CASE
WHEN $1='''' THEN null
ELSE $1::integer
END;
$BODY$
LANGUAGE ''sql'' VOLATILE;
ALTER FUNCTION esin(text) OWNER TO postgres;
5、最后一种方法是hack源码,重新编译PgSQL(代码可参见7.2版)