SQL データ型
各 DBMS は、独自の SQL 型を定義します。 各 ODBC ドライバーは、関連付けられた DBMS で定義されている SQL データ型のみを公開します。 ドライバーが DBMS SQL 型を ODBC で定義された SQL 型識別子にマップする方法と、ドライバーが DBMS SQL 型を独自のドライバー固有の SQL 型識別子にマップする方法に関する情報は、 SQLGetTypeInfo の呼び出しを通じて返されます。 ドライバーは、SQLColAttribute、SQLColumns、SQLDescribeCol、SQLDescribeParam、SQLProcedureColumns、SQLSpecialColumns の呼び出しを通じて、列とパラメーターのデータ型を記述するときにも SQL データ型を返します。
Note
SQL データ型は、実装記述子のSQL_DESC_ CONCISE_TYPE、SQL_DESC_TYPE、およびSQL_DESC_DATETIME_INTERVAL_CODEフィールドに含まれています。 SQL データ型の特性は、実装記述子のSQL_DESC_PRECISION、SQL_DESC_SCALE、SQL_DESC_LENGTH、およびSQL_DESC_OCTET_LENGTHフィールドに含まれています。 詳細については、この付録の「 データ型識別子と記述子 」を参照してください。
特定のドライバーとデータ ソースでは、この付録で定義されているすべての SQL データ型が必ずしもサポートされるとは限りません。 SQL データ型に対するドライバーのサポートは、ドライバーが準拠している SQL-92 のレベルによって異なります。 ドライバーでサポートされている SQL-92 文法のレベルを確認するために、アプリケーションは、SQL_SQL_CONFORMANCE情報の種類を使用して SQLGetInfo を呼び出します。 さらに、特定のドライバーとデータ ソースは、ドライバー固有の追加の SQL データ型をサポートする場合があります。 ドライバーがサポートするデータ型を確認するために、アプリケーションは SQLGetTypeInfo を呼び出します。 ドライバー固有の SQL データ型の詳細については、ドライバーのドキュメントを参照してください。 特定のデータ ソースのデータ型の詳細については、そのデータ ソースのドキュメントを参照してください。
重要
この付録全体の表はガイドラインに過ぎません。SQL データ型の名前、範囲、および制限について説明します。 特定のデータ ソースでは、一部の一部のデータ型のみがサポートされる場合があり、サポートされているデータ型の特性は、一覧表示されているものとは異なる場合があります。
次の表に、すべての SQL データ型の有効な SQL 型識別子を示します。 テーブルには、SQL-92 の対応するデータ型の名前と説明も一覧表示されます (存在する場合)。
SQL 型識別子[1] | 一般的な SQL データ type[2] |
一般的な型の説明 |
---|---|---|
SQL_CHAR | CHAR(n) | 固定文字列長 n の文字列。 |
SQL_VARCHAR | VARCHAR(n) | 最大文字列長 n の可変長文字列。 |
SQL_LONGVARCHAR | LONG VARCHAR | 可変長文字データ。 最大長はデータ ソースに依存します。[9] |
SQL_WCHAR | WCHAR(n) | 固定文字列長 n の Unicode 文字列 |
SQL_WVARCHAR | VARWCHAR(n) | 文字列の最大長 n を持つ Unicode 可変長文字列 |
SQL_WLONGVARCHAR | LONGWVARCHAR | Unicode 可変長文字データ。 最大長はデータ ソースに依存します |
SQL_DECIMAL | DECIMAL(p,s) | 有効桁数が p 以上で、小数点以下桁数 が s の符号付き、正確な数値 (最大有効桁数はドライバー定義です)。(1 <= p<= 15; S<= p)。[4] |
SQL_NUMERIC | NUMERIC(p,s) | 有効桁数 p と小数点以下桁数 s (1 = p<= 15<) の符号付き、正確な数値。S<= p)。[4] |
SQL_SMALLINT | SMALLINT | 有効桁数 5 と小数点以下桁数 0 の正確な数値 (符号付き: -32,768 <= n<= 32,767、unsigned: 0 <= n<= 65,535)[3]。 |
SQL_INTEGER | INTEGER | 有効桁数 10 と小数点以下桁数 0 の正確な数値 (符号: -2[31] <= n<= 2[31] - 1、unsigned: 0 <= n<= 2[32] - 1)[3]。 |
SQL_REAL | 実数 | 2 進数の有効桁数が 24 (ゼロまたは絶対値 10[-38] から 10[38]) の符号付きの近似数値。 |
SQL_FLOAT | FLOAT(p) | 少なくとも p の二項精度を持つ符号付き、近似値、数値。 (最大有効桁数はドライバー定義です)。[5] |
SQL_DOUBLE | DOUBLE PRECISION | 2 進数の有効桁数が 53 (ゼロまたは絶対値 10[-308] から 10[308]) の符号付きの近似数値。 |
SQL_BIT | BIT | 単一ビットのバイナリ データ。[8] |
SQL_TINYINT | TINYINT | 有効桁数 3 と小数点以下桁数 0 の正確な数値 (符号付き: -128 <= n<= 127、unsigned: 0 <= n<= 255)[3]。 |
SQL_BIGINT | bigint | 有効桁数 19 (符号付きの場合) または 20 (符号なしの場合) および小数点以下桁数 0 (符号付き: -2[63] <= n<= 2[63] - 1、unsigned: 0 <= n<= 2[64] - 1)[3],[9]の正確な数値。 |
SQL_BINARY | BINARY(n) | 固定長 n のバイナリ データ。[9] |
SQL_VARBINARY | VARBINARY(n) | 最大長 n の可変長バイナリ データ。 最大値はユーザーによって設定されます。[9] |
SQL_LONGVARBINARY | LONG VARBINARY | 可変長バイナリ データ。 最大長はデータ ソースに依存します。[9] |
SQL_TYPE_DATE[6] | DATE | グレゴリオ暦の規則に準拠した年、月、日の各フィールド。 (この付録 の「グレゴリオ暦の制約」を参照してください)。 |
SQL_TYPE_TIME[6] | TIME(p) | 時間、分、および 2 番目のフィールド。有効な値は 00 から 23、分は 00 から 59、有効な値は 00 から 61 の秒です。 有効桁数 p は秒の有効桁数を示します。 |
SQL_TYPE_TIMESTAMP[6] | TIMESTAMP(p) | DATE データ型と TIME データ型に対して定義された有効な値を持つ、年、月、日、時間、分、および 2 番目のフィールド。 |
SQL_TYPE_UTCDATETIME | UTCDATETIME | 年、月、日、時間、分、秒、utchour、utcminute の各フィールド。 utchour フィールドと utcminute フィールドの精度は 1/10 マイクロ秒です。 |
SQL_TYPE_UTCTIME | UTCTIME | Hour、minute、second、utchour、utcminute の各フィールド。 utchour フィールドと utcminute フィールドの精度は 1/10 マイクロ秒です。 |
SQL_INTERVAL_MONTH[7] | INTERVAL MONTH(p) | 2 つの日付間の月数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_YEAR[7] | INTERVAL YEAR(p) | 2 つの日付間の年数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_YEAR_TO_MONTH[7] | INTERVAL YEAR(p) TO MONTH | 2 つの日付の間の年と月の数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_DAY[7] | INTERVAL DAY(p) | 2 つの日付の間の日数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_HOUR[7] | INTERVAL HOUR(p) | 2 つの日付/時刻間の時間数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_MINUTE[7] | INTERVAL MINUTE(p) | 2 つの日付/時刻の間の分数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_SECOND[7] | INTERVAL SECOND(p,q) | 2 つの日付/時刻の間の秒数。 p は間隔の先頭の有効桁数で、 q は間隔秒の有効桁数です。 |
SQL_INTERVAL_DAY_TO_HOUR[7] | INTERVAL DAY(p) TO HOUR | 2 つの日付/時刻間の日数/時間数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_DAY_TO_MINUTE[7] | INTERVAL DAY(p) TO MINUTE | 2 つの日付/時刻間の日数/時間/分数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_DAY_TO_SECOND[7] | INTERVAL DAY(p) TO SECOND(q) | 2 つの日付/時刻間の日数/時間/分/秒。 p は間隔の先頭の有効桁数で、 q は間隔秒の有効桁数です。 |
SQL_INTERVAL_HOUR_TO_MINUTE[7] | INTERVAL HOUR(p) to MINUTE | 2 つの日付/時刻間の時間/分数。 p は、間隔の先頭の有効桁数です。 |
SQL_INTERVAL_HOUR_TO_SECOND[7] | INTERVAL HOUR(p) TO SECOND(q) | 2 つの日付/時刻間の時間/分/秒の数。 p は間隔の先頭の有効桁数で、 q は間隔秒の有効桁数です。 |
SQL_INTERVAL_MINUTE_TO_SECOND[7] | INTERVAL MINUTE(p) to SECOND(q) | 2 つの日付/時刻間の分/秒の数。 p は間隔の先頭の有効桁数で、 q は間隔秒の有効桁数です。 |
SQL_GUID | GUID | 固定長 GUID。 |
[1] これは 、SQLGetTypeInfo の呼び出しによってDATA_TYPE列に返される値です。
[2] これは、 SQLGetTypeInfo の呼び出しによって NAME 列と CREATE PARAMS 列で返される値です。 NAME 列は CHAR などの指定を返しますが、CREATE PARAMS 列は精度、小数点以下桁数、長さなどの作成パラメーターのコンマ区切りのリストを返します。
[3] アプリケーションは SQLGetTypeInfo または SQLColAttribute を使用して、結果セット内の特定のデータ型または特定の列が符号なしかどうかを判断します。
SQL_DECIMALデータ型とSQL_NUMERICデータ型は、その精度のみが異なります。 DECIMAL(p,s) の有効桁数は、実装で定義された 10 進精度であり、p 以上ですが、NUMERIC(p,s) の有効桁数は p と正確に等しくなります。
[5] 実装によっては、SQL_FLOATの有効桁数は 24 または 53 のいずれかになります。24 の場合、SQL_FLOATデータ型は SQL_REAL と同じです。53 の場合、SQL_FLOATデータ型はSQL_DOUBLEと同じです。
[6] ODBC 3.x では、SQL の日付、時刻、およびタイムスタンプのデータ型はそれぞれSQL_TYPE_DATE、SQL_TYPE_TIME、およびSQL_TYPE_TIMESTAMP。ODBC 2.x では、データ型はSQL_DATE、SQL_TIME、SQL_TIMESTAMP。
[7] 間隔 SQL データ型の詳細については、この付録で後述する 「Interval Data Types 」セクションを参照してください。
[8] SQL_BITデータ型の特性は、SQL-92 の BIT 型とは異なります。
[9] このデータ型には、SQL-92 に対応するデータ型がありません。
このセクションでは、次の例を示します。