Postgres - CHAR 不是空白填充的?

问题描述 投票:0回答:1

根据 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 中有所不同?

string postgresql replace char
1个回答
0
投票

replace()
函数的第一个参数是数据类型
text
,因此您的
char
输入会隐式转换为
text
。这使得它失去了尾随空白。

该行为可能与其他数据库系统不同,因为这就是我们实现它的方式。 SQL 标准没有描述

replace()
。 PostgreSQL 的行为与 SQL 标准为
char
描述的其他奇怪之处相匹配,比如它在字符串连接时丢失了尾随空格。

PostgreSQL Wiki 明确警告您不要使用

char

© www.soinside.com 2019 - 2024. All rights reserved.