SET ANSI_PADDING
SET ANSI_PADDING ステートメントにより、NULL(バイナリ ゼロ)で埋められた CHAR データ型をリレーショナル エンジンで処理できるようになります。CHAR は固定長の文字データ型として定義されます。
PSQL は 2 つのインターフェイス、トランザクショナルとリレーショナルをサポートしています。MicroKernel エンジンでは、CHAR を NULL で埋めることができます。一方、リレーショナル エンジンは ANSI 標準の埋め込み方法に従っているため、CHAR は空白で埋められます。たとえば、デフォルトでは、CREATE TABLE ステートメントで作成した CHAR 列は常に空白で埋められます。
両方のインターフェイスを使用しているアプリケーションの場合、NULL で埋められた文字列の処理が必要になる可能性があります。
構文
SET ANSI_PADDING = < ON | OFF >
備考
デフォルト値は ON です。これは、空白で埋められた文字列が CHAR に挿入されるということです。論理式の比較で、先頭の空白は意味のないものと見なされます。先頭の NULL は意味のあるものと見なされます。
このステートメントを OFF に設定すると、NULL で埋められた文字列が CHAR に挿入されるようになります。先頭の NULL と空白はどちらも論理式の比較で意味のないものと判断されます。
Windows では、ANSI 埋め込みは、レジストリ設定によって DSN に対してオンまたはオフに設定できます。Actian Web サイトの PSQL Knowledge Base で "ansipadding" を検索してください。
以下の文字列関数は NULL の埋め込みをサポートしています。
CHAR_LENGTH | CONCAT | LCASE または LOWER |
LEFT | LENGTH | LOCATE |
LTRIM | POSITION | REPLACE |
REPLICATE | RIGHT | RTRIM |
STUFF | SUBSTRING | UCASE または UPPER |
ANSI_PADDING が各関数にどのような影響を与えるかについては、対応するスカラー関数の記述を参照してください。
制限
SET ANSI_PADDING には次の制限が適用されます。
•このステートメントは固定長の文字データ型 CHAR にのみ適用され、NCHAR、VARCHAR、NVARCHAR、LONGVARCHAR、および NLONGVARCHAR には適用されません。
•ステートメントはセッション レベルに適用されます。
例
次の例は、SET ANSI_PADDING を ON にした状態と OFF にした状態で、INSERT ステートメントによる文字列の埋め込みがどのような結果になるかを示しています。
DROP TABLE t1
CREATE TABLE t1 (c1 CHAR(4))
SET ANSI_PADDING = ON
INSERT INTO t1 VALUES ('a') -- 文字列 a = a\0x20\0x20\0x20
INSERT INTO t1 VALUES ('a' + CHAR(0) + CHAR(0) + CHAR(0)) -- 文字列 a = a\0x00\0x00\0x00
DROP TABLE t1
CREATE TABLE t1 (c1 CHAR(4))
SET ANSI_PADDING = OFF
INSERT INTO t1 VALUES ('a') -- 文字列 a = a\0x00\0x00\0x00
INSERT INTO t1 VALUES ('a' + CHAR(32) + CHAR(32) + CHAR(32)) -- 文字列 a = a\0x20\0x20\0x20
============
次の例は、SET ANSI_PADDING を ON にした状態と OFF にした状態で、UPDATE ステートメントによる文字列の埋め込みがどのような結果になるかを示しています。
DROP TABLE t1
CREATE TABLE t1 (c1 CHAR(4))
SET ANSI_PADDING = ON
UPDATE t1 SET c1 = 'a' -- すべての行の c1 = a\0x20\0x20\0x20
UPDATE t1 SET c1 = 'a' + CHAR(0) + CHAR(0) + CHAR(0) -- すべての行の c1 = a\0x00\0x00\0x00
DROP TABLE t1
CREATE TABLE t1 (c1 CHAR(4))
SET ANSI_PADDING = OFF
UPDATE t1 SET c1 = 'a' -- すべての行の c1 = a\0x00\0x00\0x00
UPDATE t1 SET c1 = 'a' + CHAR(32) + CHAR(32) + CHAR(32) -- すべての行の c1 = a\0x20\0x20\0x20
============
次の例は、文字型の列 c1 の内容をバイナリ形式で表示できるよう、c1 を BINARY データ型にキャストする方法を示します。テーブル t1 には次の 6 行のデータがあるとします。
a\x00\x00\x00\x00
a\x00\x00\x00\x00
a\x00\x20\x00\x00
a\x00\x20\x00\x00
a\x20\x20\x20\x20
a\x20\x20\x20\x20
次のステートメントにより、c1 が BINARY データ型にキャストされます。
SELECT CAST(c1 AS BINARY(4)) FROM t1
SELECT ステートメントは以下の結果を返します。
0x61000000
0x61000000
0x61002000
0x61002000
0x61202020
0x61202020
関連項目