1

DB2 と Oracle は、短い文字列の右側にスペースを埋め込むことで文字比較を実装しているようです。しかし、なぜ?

データベース エンジンが、短い方の文字値にスペースを埋め込むのではなく、大きい方の文字値を削除した方がよいのではないでしょうか? つまり、クエリがSELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye 'の場合、データベース エンジンは のすべての行にスペースを追加することにSOME_TABLEなります。'Popeye '

また、Oracle と DB2 が右にのみスペースを追加する理由を理解したいですか?

4

1 に答える 1

3

あなたはさまざまなタイプのキャラクターと何が起こっているのかを混乱させています。実行する場合:

SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '

「SOME_TABLEのすべての行に」スペースは追加されません。唯一の問題は、結果の幅です。この幅は、WHERE句に表示されるものではなく、SOME_TABLEの列のプロパティによって設定されます。

CUSTOMER_NAMEがchar(x)値として宣言されている場合、文字列はその長さである必要があります。言う、それはそうですchar(10)、そしてあなたはそれに「Popeye」を割り当てます。値は6文字で、これはどういうわけか10まで埋める必要があります。SQL標準では、右側をパディングして値を作成します'Popeye '

可変長の文字列が必要な場合は、varcharまたはvarchar2を使用します。

于 2012-09-25T15:12:40.897 に答える