目的
式でUnicode区切り文字リテラル値を宣言します。
構文
- Server Character Set Specification
- サーバー文字セットの任意選択の指定。次のいずれかにすることができます。
- _Latin
- _Unicode
- _KanjiSJIS
- _Graphic
- 'Unicode_string_body'
- 次の組み合わせで構成される、単一引用符で囲まれたゼロ文字以上の文字列。
- 単一引用符( ' )またはUnicodeエスケープ文字以外の文字
- 2つの連続した単一引用符
2つの連続した単一引用符は、Unicode区切り文字リテラルに1つの単一引用符文字を含めるために使用します。
- 2つの連続したUnicodeエスケープ文字
2つの連続したエスケープ文字は、区切り文字リテラルにエスケープ文字を含めるために使用します。
- 1つのUnicodeエスケープ文字とその後の4桁の16進数(16進数字は0~9、a~f、またはA~Fの文字)
4桁の16進数はUnicode BMP(基本多言語面)文字を表わします。先行ゼロが必要です。
- 1つのUnicodeエスケープ文字とその後の正符号(+)および6桁の16進数(16進数字は0~9、a~f、またはA~Fの文字)
6桁の16進数はUnicode BMP文字または補助文字を表わします。先行ゼロが必要です。
- UESCAPE 'Unicode_esc_char'
- 区切り文字リテラルでUnicodeエスケープ文字として使用される、セッション文字セットからの単一文字。
ANSI準拠
Unicode区切り文字リテラルはANSI SQL:2011に一部準拠しています。ANSI SQL:2011規格にはUESCAPE句は不要で、Unicode_esc_charの能力を高めることができます。
最大長
Unicode区切り文字リテラルは、最大31000文字のUnicode_string_bodyで構成できます。
データ型
Unicode区切り文字リテラルのデータ型はVARCHAR(n) CHARACTER SET UNICODEで、nはUnicode文字のリテラルの解決済みの長さです。
VARCHAR(n)型の詳細については、VARCHARデータ型を参照してください。
使用上の注意
Unicode区切り文字リテラルは、一般に端末キーボードで直接入力できない文字や現在のセッション文字セットでは使用できない文字を含む文字列を挿入する際に便利です。
Unicodeのパス スルーが有効なセッションでは、Unicode区切り文字リテラルの非文字はFFFD置換文字に変換されます。Unicode Pass Throughが無効なセッションでは、エラーが返されます。非文字は、永久に内部使用のため予約されているUnicode Pass Throughです。
SELECT U&'#FFFE' UESCAPE '#'; SELECT U&'#+01FFFF' UESCAPE '#';
Unicode区切り文字リテラル内にサロゲート ペアと不適切なサロゲートがあると、Unicode Pass Throughが有効かどうかにかかわらずエラーになります。
SELECT U&'#D800#DC00' UESCAPE '#'; SELECT U&'#+00D800#+00DC00' UESCAPE '#'; SELECT U&'#+00D800#+00D801' UESCAPE '#'; SELECT U&'#+00D800' UESCAPE '#';
.set session charset 'ascii' set session character set unicode pass through on; sel u&'#+010000' uescape '#';
.set session charset 'utf8' set session character set unicode pass through off; sel u&'#+010000' uescape '#';
Unicode Pass Throughの詳細については、<Teradata Vantage™ NewSQL Engine国際文字セット サポート、B035-1125>を参照してください。
作成するアプリケーションをANSI準拠かつ移植可能なものとするには、'hexadecimal digits'XCの形式の既存の16進数文字リテラルをUnicode文字リテラルで置き換えることができます。
例: Unicode区切り文字リテラル
次のテーブルについて考慮します。
CREATE TABLE TextTable (IDNum INTEGER ,Ustring VARCHAR(10) CHARACTER SET UNICODE);
次の文はUnicode区切り文字リテラルを使用して、文字列をUstring列に挿入します。番号記号(#)をUnicodeエスケープ文字として使用しています。
INSERT TextTable (10, _Unicode U&'#8CC7#6599#5009#5132' UESCAPE '#');
次の文は2つの文字列を連結して、「855-34-9729」をUstring列に挿入します。
INSERT TextTable (11, U&'855-34-' '9729' UESCAPE '%');
次の文は、TextTableテーブルの、Ustring列内の文字列が空の文字列である場所から、すべての行を選択します。
SELECT * FROM TextTable WHERE Ustring = U&'' UESCAPE '&';
例: Unicode BMPおよび補助文字を含むリテラル
4または6桁の構文のいずれかを使用してUnicode BMP文字を指定できます。先行ゼロが必要なことに注意してください。
SELECT U&'#0041' UESCAPE '#' SELECT U&'#+000041' UESCAPE '#'
6桁の構文を使用してUnicode補助文字を指定できます。先行ゼロが必要なことに注意してください。
SELECT U&'#+020000' UESCAPE '#' SELECT U&'#+010000' UESCAPE '#'
例: エラー: サロゲート コード ポイントを含むリテラル
SELECT U&'#+010000' UESCAPE '#'
'D800DC00'
SELECT CHAR2HEXINT(U&'#D800#DC00' UESCAPE '#');