sql >> データベース >  >> RDS >> SQLite

SQLiteデータ型

    概要 :このチュートリアルでは、SQLiteデータ型システムと、ストレージクラス、マニフェスト型付け、型親和性などの関連する概念について学習します。

    SQLiteデータ型の概要

    MySQLやPostgreSQLなどの他のデータベースシステムを使用している場合は、静的型付けを使用していることに気付くでしょう。 。これは、特定のデータ型で列を宣言すると、その列には宣言されたデータ型のデータのみを格納できることを意味します。

    他のデータベースシステムとは異なり、SQLiteは動的型システムを使用します 。つまり、列に格納されている値によって、列のデータ型ではなく、そのデータ型が決まります。

    さらに、テーブルを作成するときに、列の特定のデータ型を宣言する必要はありません。整数データ型で列を宣言する場合、テキストやBLOBなど、あらゆる種類のデータ型を格納できます。SQLiteはこれについて文句を言いません。

    SQLiteは、ストレージクラスと呼ばれる5つのプリミティブデータ型を提供します。

    ストレージクラスは、SQLiteがデータをディスクに保存するために使用する形式を記述します。ストレージクラスは、データ型よりも一般的です(例:INTEGER) ストレージクラスには、6種類の整数が含まれています。ほとんどの場合、ストレージクラスとデータ型は同じ意味で使用できます。

    次の表は、SQLiteの5つのストレージクラスを示しています。

    ストレージクラス 意味
    NULL NULL値は、情報が欠落しているか不明であることを意味します。
    整数 整数値は整数(正または負)です。整数には、1、2、3、4、8バイトなどの可変サイズを指定できます。
    本物 実数は、8バイトの浮動小数点数を使用する10進値の実数です。
    テキスト TEXTは、文字データを格納するために使用されます。 TEXTの最大長は無制限です。 SQLiteはさまざまな文字エンコードをサポートしています。
    BLOB BLOBは、あらゆる種類のデータを格納できるバイナリラージオブジェクトの略です。 BLOBの最大サイズは、理論的には無制限です。

    SQLiteは、次のルールに従って、データ型に基づいて値のデータ型を決定します。

    • リテラルに引用符と小数点または指数がない場合、SQLiteはINTEGERストレージクラスを割り当てます。
    • リテラルが一重引用符または二重引用符で囲まれている場合、SQLiteはTEXTストレージクラスを割り当てます。
    • リテラルに引用符、小数点、指数がない場合、SQLiteはREALストレージクラスを割り当てます。
    • リテラルが引用符なしでNULLの場合、NULLストレージクラスが割り当てられます。
    • リテラルにX'ABCD'またはx'abcd'がある場合、SQLiteはBLOBストレージクラスを割り当てました。

    SQLiteは組み込みの日付と時刻のストレージクラスをサポートしていません。ただし、TEXT、INT、またはREALを使用して、日付と時刻の値を格納できます。日付と時刻の値を処理する方法の詳細については、SQLiteの日付と時刻のチュートリアルを確認してください。

    SQLitesはtypeof()を提供します フォーマットに基づいて値のストレージクラスをチェックできるようにする関数。次の例を参照してください:

    SELECT
    	typeof(100),
    	typeof(10.0),
    	typeof('100'),
    	typeof(x'1000'),
    	typeof(NULL);Code language: SQL (Structured Query Language) (sql)

    SQLiteの1つの列に、混合データ型を格納できます。次の例を参照してください。

    まず、test_datatypesという名前の新しいテーブルを作成します テスト用。

    CREATE TABLE test_datatypes (
    	id INTEGER PRIMARY KEY,
    	val
    );Code language: SQL (Structured Query Language) (sql)

    次に、test_datatypesにデータを挿入します テーブル。

    INSERT INTO test_datatypes (val)
    VALUES
    	(1),
    	(2),
    	(10.1),
    	(20.5),
    	('A'),
    	('B'),
    	(NULL),
    	(x'0010'),
    	(x'0011');Code language: SQL (Structured Query Language) (sql)

    第三に、typeof()を使用します valに格納されている各値のデータ型を取得する関数 列。

    SELECT
    	id,
    	val,
    	typeof(val)
    FROM
    	test_datatypes;Code language: SQL (Structured Query Language) (sql)

    上記のval列のように、SQLiteがさまざまなストレージクラスの列のデータをどのようにソートするかを尋ねる場合があります。

    これを解決するために、SQLiteはソートに関して次の一連のルールを提供します:

    • NULLストレージクラスの値が最も低くなります。他のどの値よりも低くなっています。 NULL値の間には、順序はありません。
    • 次に高いストレージクラスはINTEGERとREALです。 SQLiteはINTEGERとREALを数値で比較します。
    • 次に高いストレージクラスはTEXTです。 SQLiteは、TEXT値を比較するときにTEXT値の照合を使用します。
    • 最高のストレージクラスはBLOBです。 SQLiteはC関数memcmp()を使用します BLOB値を比較します。

    ORDER BYを使用する場合 異なるストレージクラスの列のデータを並べ替える句を使用すると、SQLiteは次の手順を実行します。

    • 最初に、ストレージクラスに基づいて値をグループ化します:NULL、INTEGER、およびREAL、TEXT、およびBLOB。
    • 次に、各グループの値を並べ替えます。

    次のステートメントは、val内の混合データを並べ替えます test_datatypesの列 テーブル:

    SELECT
    	id,
    	val,
    	typeof(val)
    FROM
    	test_datatypes
    ORDER BY val;Code language: SQL (Structured Query Language) (sql)

    SQLiteマニフェストの型付けと型の親和性

    SQLiteデータ型に関連するその他の重要な概念は、マニフェスト型付けと型親和性です。

    • マニフェスト型付けとは、データ型が、値が格納されている列のプロパティではなく、列に格納されている値のプロパティであることを意味します。 SQLiteは、マニフェスト型付けを使用して、任意の型の値を列に格納します。
    • 列のタイプアフィニティは、その列に格納されるデータに推奨されるタイプです。データ型は必須ではなく推奨されるため、列には任意の種類のデータを格納できることに注意してください。

    このチュートリアルでは、SQLiteデータ型と、ストレージクラス、マニフェスト型付け、型親和性などのいくつかの重要な概念について学習しました。


    1. SQLiteチュートリアル:知っておくべきことすべて

    2. テーブル/データベースの文字セットを決定しますか?

    3. SQL WHERE..IN句の複数の列

    4. MySQLに書き込むときにTextAreaからの改行を保持する