根据 Postgres 文档:https://www.postgresql.org/docs/current/datatype-character.html CHAR 数据类型用空白填充到所需的大小。我不明白为什么第二个查询没有返回与第一个查询相同的输出。
-- output "aaaxxxxxxx"
SELECT REPLACE('aaa ', ' ', 'x');
DROP TABLE test;
CREATE TABLE test (
col1 CHAR(10)
);
INSERT INTO test(col1) VALUES ('aaa');
-- REPLACE output "aaa"
SELECT col1, REPLACE(col1, ' ', 'x')
FROM test;
在 Oracle 和 Sql Server 中,SELECT 返回相同的输出。为什么 Postgres 中有所不同?
replace()
函数的第一个参数是数据类型text
,因此您的char
输入会隐式转换为text
。这使得它失去了尾随空白。
该行为可能与其他数据库系统不同,因为这就是我们实现它的方式。 SQL 标准没有描述
replace()
。 PostgreSQL 的行为与 SQL 标准为 char
描述的其他奇怪之处相匹配,比如它在字符串连接时丢失了尾随空格。
PostgreSQL Wiki 明确警告您不要使用
char
。