1

非常に短い質問です。なぜこのクエリを言うことができますか

select LENGTH(' '::char || ' '::char), LENGTH(' '::text || ' '::char), LENGTH(' ' || ' '), LENGTH('a'::char || 'b'::char);

戻り値

0    1    2    2

スペースは特殊文字の魔女が他の文字列と連結しないのですか?

ドキュメントにはこれだけが書かれ​​ています:

Unless otherwise noted, all of the functions listed below work
on all of these types, but be wary of potential effects of
automatic space-padding when using the character type.

なぜ私はこれをするのですか?ストアドプロシージャで文字列charを作成しているため、varcharをcharと連結しようとしても、何も起こりません。

4

1 に答える 1

2

CHARタイプは、「固定長、ブランク・パッド」です。"foobar"これは、フィールドに格納する場合char(10)、Postgresが実際に格納することを意味します"foobar "(これは4つの末尾のスペースであり、SOは隣接する空白を保持しません)。値をフェッチバックすると、末尾の空白がすべて削除されます。同じことが起こり' '::charます—その末尾の空白は削除され、長さゼロの文字列のみが残ります。

于 2012-05-29T13:32:02.793 に答える