SQLiteでは、テーブルの構造を確認する方法がかなりあります。したがって、そのテーブル内の列のデータ型を確認する方法はかなりあります。
クエリで返された列のデータ型を確認できる関数もあります。
SQLiteで列のデータ型を確認する5つの方法は次のとおりです。
PRAGMA table_info()
ステートメント
PRAGMA table_info()
ステートメントは、列やデータ型など、指定されたテーブルに関する情報を返します。
Album
というテーブルに関する情報を返す例を次に示します。 。
PRAGMA table_info(Album);
結果:
cid name type notnull dflt_value pk --- -------- ------------- ------- ---------- -- 0 AlbumId INTEGER 1 1 1 Title NVARCHAR(160) 1 0 2 ArtistId INTEGER 1 0
この場合、列は明示的に定義されたデータ型で作成されました。
別の例を次に示します。
PRAGMA table_info(Events);
結果:
cid name type notnull dflt_value pk --- --------- ------- ------- ---------- -- 0 EventId INTEGER 0 1 1 EventName 0 0 2 StartDate 0 0 3 EndDate 0 0
この場合、最初の列のみにデータ型が明示的に定義されています。
SQLiteは、他の主要なRDBMSとは異なるデータ型のアプローチを使用します。 SQLiteは動的型付けシステムを使用しているため、値のデータ型はコンテナーではなく値自体に関連付けられます。
とはいえ、SQLiteでは列のデータ型を明示的に指定できます。上記の例では、データ型が明示的に定義された列がいくつか作成されており、上記のPRAGMA
を実行すると、それらのデータ型が何であるかを確認できます。 ステートメント。
PRAGMA table_xinfo()
ステートメント
PRAGMA table_xinfo()
ステートメントは、PRAGMA table_info()
とまったく同じです。 ステートメント。ただし、仮想テーブルの非表示の列も返します。
PRAGMA table_xinfo(Album);
結果:
cid name type notnull dflt_value pk hidden --- -------- ------------- ------- ---------- -- ------ 0 AlbumId INTEGER 1 1 0 1 Title NVARCHAR(160) 1 0 0 2 ArtistId INTEGER 1 0 0
基本的にtable_info()
と同じであることがわかります 、余分な列を除いて。
.schema
コマンド
テーブルの構造を取得する別の方法は、.schema
を使用することです。 指図。これは、テーブルの作成に使用されたSQLを返すために使用できるいくつかのメソッドの1つです。
例:
.schema Album
結果:
CREATE TABLE Chinook.[Album] ( [AlbumId] INTEGER NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]), FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE INDEX Chinook.[IFK_AlbumArtistId] ON [Album] ([ArtistId]);
このメソッドを使用すると、データ型の指定を含め、テーブルの再作成に必要なSQLを生成できます。
sqlite_schema
表
sqlite_schema
を使用できます 前の例と同じものにテーブルを作成します。
同じテーブルを使用した例を次に示します。
SELECT sql
FROM Chinook.sqlite_schema
WHERE tbl_name = 'Album';
結果:
CREATE TABLE [Album] ( [AlbumId] INTEGER NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]), FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION ) CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId])
sqlite_schema
sqlite_master
を使用してテーブルにアクセスすることもできます 。
typeof()
機能
typeof()
を使用できます クエリによって返される列のデータ型を取得する関数。具体的には、指定された式のデータ型を返します。
例:
SELECT typeof(Title) FROM Album
LIMIT 1;
結果:
text
ここではLIMIT
を使用しました 結果を1行だけに制限する句。そうしないと、テーブルの各行で同じ結果が繰り返されます。
このメソッドは、列に割り当てられた実際のデータ型ではなく、クエリによって返される式のデータ型を返すことに注意してください。返される可能性のあるタイプは次のとおりです。
-
null
integer
real
text
-
blob
SQLiteデータベースの各列には、上記のタイプのアフィニティのいずれかが割り当てられます。
これらは実際にはストレージクラスと呼ばれます。ストレージクラスは、データ型よりも一般的です。 SQLステートメントのテキストに埋め込まれたリテラルであろうと、プリコンパイルされたSQLステートメントにバインドされたパラメーターであろうと、SQLステートメントのすべての値には、暗黙のストレージクラスがあります。データベースエンジンは、数値ストレージクラス間で値を変換する場合があります(INTEGER
およびREAL
)およびTEXT
クエリ実行中。
SQLiteのデータ型に関する詳細情報
SQLiteのデータ型の詳細については、SQLiteデータ型(SQLiteドキュメント)および柔軟な入力の利点(SQLiteドキュメント)を参照してください。
STRICT
も参照してください テーブル(SQLiteドキュメント)、2021-11-27のSQLiteバージョン3.37.0で追加された機能で、柔軟な型指定システムを拒否し、代わりに他のすべてのSQLデータベースエンジンやSQL標準。