SQL Engine Reference (v11)

SET ANSI_PADDING

SET ANSI_PADDING ステートメントにより、NULL(バイナリ ゼロ)で埋められた CHAR データ型をリレーショナル インターフェイスで処理できるようになります。CHAR は固定長の文字データ型として定義されます。

Pervasive PSQL は 2 つのインターフェイス、トランザクショナルとリレーショナルをサポートしています。トランザクショナル インターフェイスでは、CHAR を NULL で埋めることができます。一方、リレーショナル インターフェイスは ANSI 標準の埋め込み方法に従っているため、CHAR は空白で埋められます。たとえば、デフォルトでは、CREATE TABLE ステートメントで作成した CHAR 列は常に空白で埋められます。

両方のインターフェイスを使用しているアプリケーションの場合、NULL で埋められた文字列の処理が必要になる可能性があります。

構文

SET ANSI_PADDING = <ON | OFF> 

備考

デフォルト値は ON です。これは、空白で埋められた文字列が CHAR に挿入されるということです。論理式の比較で、先頭の空白は意味のないものと見なされます。先頭の NULL は意味のあるものと見なされます。

このステートメントを OFF に設定すると、NULL で埋められた文字列が CHAR に挿入されるようになります。先頭の NULL と空白はどちらも論理式の比較で意味のないものと判断されます。

Windows では、ANSI 埋め込みは、レジストリ設定によって DSN に対してオンまたはオフに設定できます。Pervasive Web サイトの Pervasive Knowledge Base で "ansipadding" を検索してください。

以下の文字列関数は NULL の埋め込みをサポートしています。

CHAR_LENGTH
CONCAT
LCASE または LOWER
LEFT
LENGTH
LOCATE
LTRIM
POSITION
REPLACE
REPLICATE
RIGHT
RTRIM
STUFF
SUBSTRING
UCASE または UPPER

制限

SET ANSI_PADDING には次の制限が適用されます。

次の例は、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 
666

次の例は、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 
666

次の例は、文字型の列 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 

関連項目

INSERT

UPDATE

「文字列関数」

「変換関数」


SELECT

SET CACHED_PROCEDURES