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-literal、ODBC-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 データ型にバインドすることはお勧めしません。 通常、この変換は非効率的で低速です。