SQLite是无类型的吗?

man*_*uai 5 java sqlite android

如果sqlite是无类型的,为什么我们声明列的数据类型?declare数据类型有什么用?

为什么android SQLite可以将double值(java 8字节)存储到float列中

dan*_*n04 2

它用于确定列的“亲和性”。

CREATE TABLE Example (
    IntegerAffinity    INTEGER,
    RealAffinitity     REAL,
    NumericAffinity    NUMERIC,
    TextAffinity       TEXT,
    NoAffinity
);
Run Code Online (Sandbox Code Playgroud)

向该表中插入一些值(使用 Pythonsqlite3模块)会得到:

>>> 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')]
Run Code Online (Sandbox Code Playgroud)
  • 在文本关联列中,数字被转换为字符串。
  • 在整数、实数和数字关联列中,包含数字的字符串将转换为数字。
  • 不包含数字的字符串仍然是字符串,即使在数字列中也是如此。
  • 无论柱亲和力如何,斑点始终是斑点。
  • 在具有 NONE 亲和力的列中,值按原样插入。