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 integerrealtext-
blob
SQLiteデータベースの各列には、上記のタイプのアフィニティのいずれかが割り当てられます。
これらは実際にはストレージクラスと呼ばれます。ストレージクラスは、データ型よりも一般的です。 SQLステートメントのテキストに埋め込まれたリテラルであろうと、プリコンパイルされたSQLステートメントにバインドされたパラメーターであろうと、SQLステートメントのすべての値には、暗黙のストレージクラスがあります。データベースエンジンは、数値ストレージクラス間で値を変換する場合があります(INTEGER およびREAL )およびTEXT クエリ実行中。
SQLiteのデータ型に関する詳細情報
SQLiteのデータ型の詳細については、SQLiteデータ型(SQLiteドキュメント)および柔軟な入力の利点(SQLiteドキュメント)を参照してください。
STRICTも参照してください テーブル(SQLiteドキュメント)、2021-11-27のSQLiteバージョン3.37.0で追加された機能で、柔軟な型指定システムを拒否し、代わりに他のすべてのSQLデータベースエンジンやSQL標準。