次の方法で共有


C から SQL へ: 文字

文字 ODBC C データ型の識別子は次のとおりです。

SQL_C_CHAR

SQL_C_WCHAR

次の表は、C 文字データの変換先となる ODBC SQL データ型を示しています。 テーブル内の列と用語の詳細については、「 C から SQL データ型へのデータの変換」を参照してください。

Note

文字 C データを Unicode SQL データに変換する場合、Unicode データの長さは偶数である必要があります。

SQL 型識別子 テスト SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
データ <のバイト長 = 列の長さ。

データ > のバイト長 列の長さ。
該当なし

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
データ <の文字長 = 列の長さ。

データ > の文字長 列の長さ。
該当なし

22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
切り捨てなしで変換されたデータ

小数部の桁を切り捨てて変換されたデータ[e]

データを変換すると、(小数ではなく) 全体の数字が失われます[e]

データ値が数値リテラルではありません
該当なし

22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
データが、数値の変換先のデータ型の範囲内にある

データが、数値の変換先となるデータ型の範囲外である

データ値が数値リテラルではありません
該当なし

22003

22018
SQL_BIT データが 0 または 1 である

データが 0 より大きく、2 未満で、1 と等しくない

データが 0 より小さいか、2 以上である

データが数値リテラルではありません
該当なし

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(データのバイト長) / 2 <= 列バイト長

(データのバイト長) / 2 > 列のバイト長

データ値が 16 進数の値ではありません
該当なし

22001

22018
SQL_TYPE_DATE データ値は有効な ODBC-date-literal です

データ値は、有効な ODBC-timestamp-literal です。時間の部分は 0 です

データ値は、有効な ODBC-timestamp-literal です。time 部分が 0 以外である[a]

データ値が有効な ODBC-date-literal または ODBC-timestamp-literal ではありません
該当なし

該当なし

22008

22018
SQL_TYPE_TIME データ値は有効な ODBC-time-literal です

データ値は、有効な ODBC-timestamp-literal です。秒の小数部が 0[b]

データ値は、有効な ODBC-timestamp-literal です。秒の小数部が 0 以外である [b]

データ値が有効な ODBC-time-literal または ODBC-timestamp-literal ではありません
該当なし

該当なし

22008

22018
SQL_TYPE_TIMESTAMP データ値は、有効な ODBC-timestamp-literal です。秒の小数部が切り捨てられない

データ値は、有効な ODBC-timestamp-literal です。秒の小数部の切り捨て

データ値は有効な ODBC-date-literal[c] です

データ値は有効な ODBC-time-literal[d] です

データ値が有効な ODBC-date-literalODBC-time-literal、または ODBC-timestamp-literal ではありません
該当なし

22008

該当なし

該当なし

22018
すべての SQL 間隔の種類 データ値は有効な 間隔値です。切り捨ては行われません

データ値は有効な 間隔値です。いずれかのフィールドの値が切り捨てられます

データ値が有効な間隔リテラルではありません
該当なし

22015

22018

[a] タイムスタンプの時刻部分が切り捨てられます。

[b] タイムスタンプの日付部分は無視されます。

[c] タイムスタンプの時刻部分は 0 に設定されます。

[d] タイムスタンプの日付部分は現在の日付に設定されます。

[e] ドライバー/データ ソースは、変換を実行する前に、文字列全体が受信されるまで (文字データが SQLPutData への呼び出しによって一部ずつ送信される場合でも) 実質的に待機します。

文字 C データが数値、日付、時刻、またはタイムスタンプ SQL データに変換される場合、先頭と末尾のブランクは無視されます。

文字 C データをバイナリ SQL データに変換すると、2 バイトの文字データはそれぞれ 1 バイト (8 ビット) のバイナリ データに変換されます。 文字データの各 2 バイトは、16 進数形式で数値を表します。 たとえば、"01" はバイナリ 00000001に変換され、"FF" はバイナリ 11111111に変換されます。

ドライバーは常に 16 進数のペアを個々のバイトに変換し、null 終了バイトを無視します。 このため、文字列の長さが奇数の場合、文字列の最後のバイト (null 終端バイトがある場合は除く) は変換されません。

Note

アプリケーション開発者は、文字 C データをバイナリ SQL データ型にバインドすることはお勧めしません。 通常、この変換は非効率的で低速です。