SQLite 数据类型
SQLite データ型は、あらゆるオブジェクトのデータ型を指定するために使用される属性です。SQLite の各列、各変数、および各式には関連するデータ型があります。
これらのデータ型は、テーブル作成時に使用できます。SQLite は、より一般的な動的型システムを使用します。SQLite では、値のデータ型はそのコンテナではなく、値自体に関連しています。
SQLite ストレージクラス
SQLite データベースに格納される各値は、次のいずれかのストレージクラスを持ちます:
| 存储类 | 描述 |
|---|---|
| NULL | 値は NULL 値です。 |
| INTEGER | 値は符号付き整数で、値のサイズに応じて 1、2、3、4、6、または 8 バイトで格納されます。 |
| REAL | 値は浮動小数点数で、8 バイトの IEEE 浮動小数点数として格納されます。 |
| TEXT | 値はテキスト文字列で、データベースエンコーディング(UTF-8、UTF-16BE、または UTF-16LE)を使用して格納されます。 |
| BLOB | 値は blob データで、入力内容に基づいてそのまま格納されます。 |
SQLite のストレージクラスは、データ型よりもやや一般的です。たとえば、INTEGER ストレージクラスには、長さの異なる 6 種類の整数データ型が含まれます。
SQLite アフィニティ(Affinity)型
SQLite は列のアフィニティタイプの概念をサポートしています。どの列でも引き続き任意のタイプのデータを格納できますが、データ挿入時には、そのフィールドのデータは優先的にアフィニティタイプをその値の格納方法として採用します。SQLite の現在のバージョンでは、次の 5 つのアフィニティタイプをサポートしています:
| 親と型 | 描述 |
|---|---|
| TEXT | 数値型データは、挿入前にテキスト形式に変換されてから、対象フィールドに挿入される必要があります。 |
| NUMERIC | テキストデータが NUMERIC アフィニティのフィールドに挿入される場合、変換操作によってデータ情報が失われず、完全に可逆のであるならば、SQLite はそのテキストデータを INTEGER または REAL 型のデータに変換します。変換に失敗した場合、SQLite はそのデータを TEXT として格納します。NULL または BLOB 型の新しいデータについては、SQLite は変換を行わず、NULL または BLOB としてそのまま格納します。なお、補足として、"30000.0" のような浮動小数点形式の定数テキストは、INTEGER に変換しても数値情報が失われない場合、SQLite はそれを INTEGER の格納方式に変換します。 |
| INTEGER | アフィニティタイプが INTEGER のフィールドの場合、そのルールは NUMERIC と同じですが、唯一の違いは CAST 式を実行するときです。 |
| REAL | そのルールは基本的に NUMERIC と同じですが、唯一の違いは "30000.0" のようなテキストデータを INTEGER の格納方式に変換しないことです。 |
| NONE | 変換は一切行わず、そのデータが属するデータ型のまま格納します。 |
SQLite アフィニティ型と型名
次の表は、SQLite3 テーブルの作成時に使用できるさまざまなデータ型名と、対応するアフィニティタイプを示しています:
| 数据类型 | 親と型 |
|---|---|
| INTEGER |
| TEXT |
| BLOB |
| REAL |
| NUMERIC |
Boolean データ型
SQLite には独立した Boolean ストレージクラスはありません。代わりに、ブール値は整数 0(false)と 1(true)として格納されます。
Date と Time データ型
SQLite には日付や時刻を格納するための独立したストレージクラスはありませんが、SQLite は日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。
| 存储类 | 日期格式 |
|---|---|
| TEXT | "YYYY-MM-DD HH:MM:SS.SSS" 形式の日付。 |
| REAL | 紀元前 4714 年 11 月 24 日グリニッジ標準時の正午から数えた日数。 |
| INTEGER | 1970-01-01 00:00:00 UTC から数えた秒数。 |
日付と時刻は上記のいずれかの形式で格納でき、組み込みの日付時刻関数を使用して異なる形式間で自由に変換できます。
其他扩展