|
SET ANSI_PADDING ステートメントにより、NULL(バイナリ ゼロ)で埋められた CHAR データ型をリレーショナル インターフェイスで処理できるようになります。CHAR は固定長の文字データ型として定義されます。
Pervasive PSQL は 2 つのインターフェイス、トランザクショナルとリレーショナルをサポートしています。トランザクショナル インターフェイスでは、CHAR を NULL で埋めることができます。一方、リレーショナル インターフェイスは ANSI 標準の埋め込み方法に従っているため、CHAR は空白で埋められます。たとえば、デフォルトでは、CREATE TABLE ステートメントで作成した CHAR 列は常に空白で埋められます。
両方のインターフェイスを使用しているアプリケーションの場合、NULL で埋められた文字列の処理が必要になる可能性があります。
デフォルト値は 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
次の例は、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 ステートメントは以下の結果を返します。
|