私はそれtinyint
が1バイト整数であることを理解しています(ちなみに、それは符号付きですか、それとも符号なしですか?)。議論は何(3)
を意味しますか?検索しましたが、答えが見つかりませんでした。
2 に答える
SQLiteは列にデータ型を「モック実装」します。基本的に、標準のSQL構文を受け入れますが、それ以外の場合は無視します。(ただし、タイプの親和性と強制を参照してください。)
「相違点」のドキュメントのマニフェスト入力を参照してください。
ほとんどのSQLデータベースエンジンは静的型付けを使用します。データ型はテーブルの各列に関連付けられており、その特定のデータ型の値のみをその列に格納できます。SQLiteは、マニフェスト型付けを使用してこの制限を緩和します。マニフェスト型付けでは、データ型は値自体のプロパティであり、値が格納されている列のプロパティではありません。したがって、SQLiteを使用すると、ユーザーは、列の宣言された型に関係なく、任意のデータ型の任意の値を任意の列に格納できます。(このルールにはいくつかの例外があります。INTEGERPRIMARYKEY列は整数のみを格納できます。また、SQLiteは、可能な場合、列の宣言されたデータ型に値を強制変換しようとします。)
SQLiteバージョン3のデータ型とタイプアフィニティも参照してください。
列のアフィニティは、示されている順序で次のルールに従って、宣言された列のタイプによって決定されます。
宣言されたタイプに文字列「INT」が含まれている場合、INTEGERアフィニティが割り当てられます。
[簡潔にするために他の規則は省略]
その他のデータベースについては、適切なデータベース固有のドキュメントを参照してください:-)
MySQLの列タイプの定義については、このブログページを参照してください。
数値タイプの場合、長さ修飾子は実際には表示幅であり、フィールドに格納できるものとは関係ありません。はい、それだけです– TINYINT(1)とTINYINT(4)はどちらも、-128..127(または符号なし値0..255)の範囲の値を格納でき、1つの小さなひねり(日付に関係する)を伴う完全に同一のデータ型です。検索–以下を参照)。ソースから直接取得した、表示幅の意味の説明は次のとおりです。
表示幅は、列に格納できる値の範囲や、列に指定された幅を超える値に対して表示される桁数を制限しません。たとえば、SMALLINT(3)として指定された列の通常のSMALLINT範囲は-32768〜32767であり、3文字で許可されている範囲外の値は3文字を超えて表示されます。