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フィールドに含まれています。 詳細については、この付録で後述する「 Data 型識別子と記述子 を参照してください。
特定のドライバーとデータ ソースでは、この付録で定義されているすべての SQL データ型が必ずしもサポートされるとは限りません。 SQL データ型に対するドライバーのサポートは、ドライバーが準拠している SQL-92 のレベルによって異なります。 ドライバーでサポートされている SQL-92 文法のレベルを判断するために、アプリケーションは SQLGetInfo をSQL_SQL_CONFORMANCE情報の種類で呼び出します。 さらに、特定のドライバーとデータ ソースは、ドライバー固有の追加の 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小数点以下桁数の (1 <= p< = 15; の符号付き、正確な数値s<= p).[4] |
SQL_SMALLINT | SMALLINT | 有効桁数 5 と小数点以下桁数 0 の正確な数値 (符号付き: -32,768 <= n<= 32,767、符号なし: 0 <= n<= 65,535)[3]。 |
SQL_INTEGER | INTEGER | 有効桁数 10 と小数点以下桁数 0 の正確な数値 (符号付き: -2[31] <= n<= 2[31] - 1、符号なし: 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、符号なし: 0 <= n<= 255)[3]。 |
SQL_BIGINT | BIGINT | 有効桁数が 19 (符号付きの場合) または 20 (符号なしの場合) および小数点以下桁数 0 (符号付き: -2[63] <= n<= 2[63] - 1、符号なし: 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) | 年、月、日、時、分、および 2 番目のフィールド。DATE データ型と TIME データ型に対して有効な値が定義されています。 |
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] これは、
[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 データ型 」セクションを参照してください。
[8] SQL_BITデータ型は、SQL-92 の BIT 型とは異なる特性を持っています。
[9] このデータ型には、SQL-92 に対応するデータ型がありません。
このセクションでは、次の例を示します。