Share via


SQL データ型

各 DBMS は、独自の SQL 型を定義します。 各 ODBC ドライバーは、関連付けられた DBMS で定義されている SQL データ型のみを公開します。 ドライバーが DBMS SQL 型を ODBC で定義された SQL 型識別子にマップする方法と、ドライバーが DBMS SQL 型を独自のドライバー固有の SQL 型識別子にマップする方法に関する情報は、 SQLGetTypeInfo の呼び出しを通じて返されます。 ドライバーは、SQLColAttribute、SQLColumnsSQLDescribeColSQLDescribeParamSQLProcedureColumnsSQLSpecialColumns の呼び出しを通じて、列とパラメーターのデータ型を記述するときにも 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 に対応するデータ型がありません。

このセクションでは、次の例を示します。