2012-03-21 3 views

答えて

2

これは、カラムの「親和性」を決定するために使用されます。

CREATE TABLE Example (
    IntegerAffinity INTEGER, 
    RealAffinitity  REAL, 
    NumericAffinity NUMERIC, 
    TextAffinity  TEXT, 
    NoAffinity 
); 

)(Pythonのsqlite3モジュールで)この表の中にいくつかの値を示します挿入:テキスト親和性カラムで

>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [1234] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", ['1234'] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [math.pi] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [str(math.pi)] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", ['ABC'] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [b'5678'] * 5) 
>>> db.execute("INSERT INTO Example VALUES(?, ?, ?, ?, ?)", [b'\xAB\xCD\xEF'] * 5) 
>>> list(db.execute("SELECT * FROM Example")) 
[(1234, 1234.0, 1234, '1234', 1234), 
(1234, 1234.0, 1234, '1234', '1234'), 
(3.141592653589793, 3.141592653589793, 3.141592653589793, '3.14159265358979', 3.141592653589793), 
(3.141592653589793, 3.141592653589793, 3.141592653589793, '3.141592653589793', '3.141592653589793'), 
('ABC', 'ABC', 'ABC', 'ABC', 'ABC'), 
(b'5678', b'5678', b'5678', b'5678', b'5678'), 
(b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef', b'\xab\xcd\xef')] 
  • 、数字が文字列に変換取得します。
  • 整数、実数、数値親和性の列では、数値を含む文字列が数値に変換されます。
  • 数値を含まない文字列は、数値列であっても文字列のままです。
  • ブロブは、カラムの親和性に関係なく、ブロブのままです。
  • NONEアフィニティの列では、値はそのまま挿入されます。
3

宣言された列のデータ・タイプがヒント(http://sqlite.org/faq.html#q3)として使用される。

したがって、例えば、列がある場合INTEGER型の文字列を挿入しようとすると、SQLiteは文字列を整数に変換しようとします。できれば整数を挿入します。そうでなければ、文字列を挿入します。この機能をタイプアフィニティと呼びます。

ところで、SQLiteはタイプレスではありません。動的タイピングを使用します。つまり、挿入する値は、テーブル宣言から型を推測するのではなく、独自の型情報を保持します。 http://sqlite.org/datatype3.html

1

ドキュメントを確認してください。 SQLiteのデータベースおよびその他の エンジン間最大化との互換性するためにはhttp://sqlite.org/datatype3.html

、SQLiteはカラムの「型親和性」の概念をサポートしています。 その列に格納されているデータの推奨タイプは、 です。ここでの重要なアイデアは、タイプが であることです。これは必須ではありません。。どの列にも、すべてのタイプのデータを格納することができます。 選択肢を与えられた列の中には、 を使用して別のストレージクラスを使用するほうが好ましいでしょう。 列の優先する記憶域クラスを「親和性」と呼びます。

他のDBMSとの互換性を維持しようとしているようです。 するために、整数としてディスクに書き込まれていない端数部分と

...小さな浮動小数点値とREAL親和性を有する 列に格納されている:

はまた、彼らは、次の操作を行うことができるようにしたいですスペースを少なくして、値が読み出されると自動的に浮動小数点の ポイントに変換されます。

最終的に列の親和性は、宣言された列の型によって決まります。そのため、列の型を宣言するのはこのためです。

+0

彼らはまた、[間違ったものとしてそれを正当化する](http://www.sqlite.org/datatypes.html)、そしてその後、テキストと数値型を後で追加することによって間違っていることを認めます! – Timmmm

関連する問題